我正在使用依赖于另一个的共享库。 libA.so使用libB.so.所有文件都使用-fPIC编译。链接使用-shared。当我在libA.so上调用dlopen时,它无法在libB.so中找到符号,我得到“未定义的符号”错误。
dlopen(/usr/share/orthanc/plugins/libA.so)失败:错误 /usr/local/lib/libB.so: undefined symbol: _ZN3Aws5Utils6Stream34DefaultResponseStreamFactoryMethodEv
ldd返回:
libA.so:
linux-vdso.so.1 (0x00007ffc35b61000)
libB.so => /usr/local/lib/libB.so (0x00007fdb04999000)
libawss3cpp.so => /usr/local/lib/libawss3cpp.so (0x00007fdb0424b000)
libjsoncpp.so => /usr/local/lib/libjsoncpp.so (0x00007fdb03fd7000)
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007fdb03c55000)
当我试图在lib中找到这个符号时,它返回:
nm -gC libB.so | grep DefaultResponse AWS ::的Utils ::流:: DefaultResponseStreamFactoryMethod()
删除libB.so后,我收到文件未找到错误。
答案 0 :(得分:0)
我在评论中询问nm
的输出是否列出了T
或其他内容作为其值。你回答它是U
。 U
代表 undefined 。这意味着有问题的符号仅由此库引用(即Aws::Utils::Stream::DefaultResponseStreamFactoryMethod()
的代码不是 libB.so
的一部分。)
找到实际定义符号的库并链接该库。