Ошибка «Неопределенная ссылка» из ld - PullRequest
0 голосов
/ 16 декабря 2009

Это не так наивно, как заголовок может заставить вас думать.

Я получаю сообщение об ошибке «Undefined Reference» от компоновщика / ld для пары символов функции в сторонней общей библиотеке, которую я пытаюсь связать с моим исполняемым файлом.

Странная часть в том, что сама библиотека должна содержать определение рассматриваемых символов-нарушителей.

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

Я испортил свои флаги gcc / ld или это что-то еще?

Ответы [ 2 ]

0 голосов
/ 15 августа 2012

Вы проверили порядок ссылок? Это стало более строгим в последних версиях GCC.

Например, распространенная проблема вызвана тем, что:

g++ -lX11 -lSuperLibrary awesomeApp.cpp

вместо этого:

g++ awesomeApp.cpp -lX11 -lSuperLibrary

Также имеет значение, в каком порядке расположены флаги библиотеки, если они взаимозависимы.

Существуют флаги для многопроходной библиотеки, которые могут помочь вам решить вашу проблему. Чтобы сделать то же самое, что и выше, но с «компоновкой» библиотек компоновщика и созданием рекурсивной ссылки на них (за счет снижения производительности компоновщика) вы можете сделать что-то вроде следующего:

g++ awesomeApp.cpp -Wl,--start-group -lX11 -lSuperLibrary -Wl,--end-group

Где -Wl,<option> передает параметр компоновщику ... в этом случае --start-group и --end-group.

Отличная аналогия важности порядка ссылок здесь

Надеюсь, это поможет.

0 голосов
/ 16 декабря 2009

Невозможно сказать из вашего описания, которое содержит примерно ноль полезной информации. Возможно, вы не включили правильный заголовочный файл в некоторые исходные файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...