Linker error: undefined reference to xxx after including .so lib
Linker error: undefined reference to xxx after including .so lib
在我的命令中明确使用 -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 文件并找到了它!
谢谢你的帮助,我不知道发生了什么。
找到问题了!
这是因为 IDS(cam 供应商)提供了 api 修改后的共享对象,但具有修改的条目名称(与 IDS 相同的名称)...
从 github 那里获得了真正的库,并且有效!
在我的命令中明确使用 -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 文件并找到了它!
谢谢你的帮助,我不知道发生了什么。
找到问题了! 这是因为 IDS(cam 供应商)提供了 api 修改后的共享对象,但具有修改的条目名称(与 IDS 相同的名称)...
从 github 那里获得了真正的库,并且有效!