Неопределенное эталонное событие с -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 файлы и находит их!
Спасибо за вашу помощь, я понятия не имею, что происходит.