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



我正在使用一个依赖于另一个库的共享库。 libA.so 使用 libB.so。所有文件都使用 -fPIC 编译。链接使用 -共享。当我在 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)

当我尝试在库中找到此符号时,它会返回以下内容:

nm -gC libB.so | grep DefaultResponse aws::utils::Stream::D efaultResponseStreamFactoryMethod((

删除 libB.so 时出现"找不到文件"错误。

我在评论中问nm的输出是否列出了T或其他东西作为其值。你回答说是U. U 代表 未定义。这意味着所讨论的符号仅由该库引用(即,Aws::Utils::Stream::DefaultResponseStreamFactoryMethod()的代码不是libB.so的一部分(。

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

最新更新