Существует ли автоматизированная программа для поиска ошибок компоновщика C ++?

StackOverflow https://stackoverflow.com/questions/1825094

Вопрос

Я работаю в среде Linux на C ++, используя компилятор GCC.

В настоящее время я работаю над модификацией и обновлением большого уже существующего массива кода.В рамках этого было необходимо добавить довольно большое количество небольших ссылок по всему коду в самых разных местах, чтобы связать вещи воедино, а также добавить несколько новых библиотек внешнего кода.Существует также довольно большая и сложная структура Make-файлов, связанных с файлом configure.ac для управления процессом сборки.

После запуска процесса сборки все компилируется без проблем, но возвращается со страшной ошибкой компоновщика при попытке использовать недавно добавленную библиотеку пользовательского кода, которую мы создали.Теперь мы тщательно прошлись по огромному объему кода в поисках орфографических несоответствий, проверили порядок включения всех библиотек в процесс сборки и убедились, что созданные файлы .o содержат то, что нам нужно, используя дампы, и все они находятся там, где и должны быть.Мы также протестировали библиотеку отдельно, и проблема определенно заключается не в этом.

Короче говоря, мы перепробовали большинство вещей, которые вы обычно должны делать в этих сценариях.

Есть ли инструмент для C ++, который может автоматически обнаруживать ошибки компоновщика, аналогично cppcheck или splint (оба из которых мы запустили безрезультатно), который мог бы помочь здесь?

Это было полезно?

Решение

Не знаю вашей платформы, но я провел некоторое время с проблемами компоновщика в gcc, пока не понял, что для ссылки статической библиотеки ( .a ) требуется определенный порядок, а для ссылки gcc object.o first.a second.a , чем gcc object.o second.a first.a .

Другие советы

FWIW (немного) Я пытаюсь решить проблему такого рода, используя другой компоновщик, поскольку у меня есть доступ к нескольким разным платформам.Если вы можете использовать другой компоновщик, вы найдете либо:

a) программа связывает, которая преобразует вашу проблему из "почему она не связывается?" в "в чем различия между компоновщиками и компоновкой?", что не совсем шаг вперед, но иногда шаг в одну сторону дает вам другую перспективу, с которой вы можете увидеть решение;

или

б) ему не удается установить связь, и в этом случае другой компоновщик может предоставить более полезную информацию о причинах сбоя.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top