我正在使用一个依赖于另一个库的共享库。 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
的一部分(。
找到实际定义符号的库并链接该库。