Ошибка компоновщика: неопределенная ссылка на xxx после включения .so lib - PullRequest
0 голосов
/ 14 октября 2019

Неопределенное эталонное событие с -lmylib и -LmyPath явно в моей команде.

Я пытаюсь скомпилировать тестовую программу, используя genicam API. Этот API предоставляет совместно используемые библиотеки для Linux со всеми необходимыми определениями. Моя команда выглядит следующим образом:

g++ -L/lib -lrt -ldl -Wl,-E -pthread -o mytest <some .o files>  
-lFirmwareUpdate_gcc49_v3_1_IDS -llog4cpp_gcc49_v3_1_IDS 
-lGCBase_gcc49_v3_1_IDS -lLog_gcc49_v3_1_IDS -lMathParser_gcc49_v3_1_IDS 
-lNodeMapData_gcc49_v3_1_IDS -lXmlParser_gcc49_v3_1_IDS 
-lGenApi_gcc49_v3_1_IDS

Программа компилируется, но все ссылки на определения, которые должны быть в .so файлах, не определены, согласно компоновщику, например:

/usr/bin/ld: <my.o>: in function <myObject>::setTriggerMode(char const*):
my.cpp:271: undefined reference to GenICam_3_1::gcstring::gcstring(char const*)'

Я попытался заглянуть внутрь библиотек и сохранить тот же пример:

nm -D /lib/libGCBase_gcc49_v3_1_IDS.so | grep -i gcstring
000000000000c400 T _ZN15GenICam_3_1_IDS8gcstringC1Emc

Эта строка не единственная строка вывода, но на самом деле кажется, что gcstring там полностью определена .. .

Итак, я попытался узнать, высмеивал ли меня ld или нет, и снова выполнил мою команду компиляции с помощью strace (-f). ld действительно открывает хорошие .so файлы и находит их!

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

1 Ответ

0 голосов
/ 15 октября 2019

Нашел проблему! Это было из-за IDS (производитель камер), который предоставляет измененные общие объекты API, но с измененными именами записей (те же имена, в которых есть IDS) ...

Получил настоящие библиотеки от github иэто работает!

...