2009-12-16 4 views
0

Это не так наивно, как название может заставить вас подумать.«Неопределенная ссылка» Ошибка от ld

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

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

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

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

+0

«Я испортил свои gcc/ld флаги или это что-то еще?» Ответ на этот вопрос «да». Пожалуйста, предоставьте более подробную информацию. –

ответ

1

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

0

Вы проверили ваш заказ на связь? Это стало более жестким в последних версиях 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.

Большая аналогия почему порядок связи Важен here

Я надеюсь, что помогает.

Смежные вопросы