Linux共享库链接错误(未定义的符号)

时间:2018-01-26 13:04:10

标签: c++ linux compilation shared-libraries

我正在使用依赖于另一个的共享库。 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后,我收到文件未找到错误。

1 个答案:

答案 0 :(得分:0)

我在评论中询问nm的输出是否列出了T或其他内容作为其值。你回答它是UU代表 undefined 。这意味着有问题的符号仅由此库引用(即Aws::Utils::Stream::DefaultResponseStreamFactoryMethod()的代码不是 libB.so的一部分。)

找到实际定义符号的库并链接该库。