可执行文件似乎无法解析链接库中的符号。 LD_DEBUG = libs的相关输出显示正在加载正确的库:
6557: /usr/lib/libcharon.so.0: error: symbol lookup error: undefined symbol: auth_class_names (fatal)
/usr/libexec/ipsec/charon: symbol lookup error: /usr/lib/libcharon.so.0: undefined symbol: auth_class_names
nm -D表示定义了符号auth_class_names:
nm -D /usr/lib/libcharon.so.0|grep auth_class_names
U auth_class_names
欢迎所有线索和想法
编辑:ldd的输出添加:
/usr/lib# ldd /usr/lib/libstrongswan.so
libpthread.so.0 => /lib/arm-linux-gnueabi/libpthread.so.0 (0xb6ecd000)
libdl.so.2 => /lib/arm-linux-gnueabi/libdl.so.2 (0xb6ec2000)
librt.so.1 => /lib/arm-linux-gnueabi/librt.so.1 (0xb6eb3000)
libc.so.6 => /lib/arm-linux-gnueabi/libc.so.6 (0xb6d78000)
/lib/ld-linux.so.3 (0xb6f25000)
/usr/lib# ldd /usr/lib/libcharon.so
libm.so.6 => /lib/arm-linux-gnueabi/libm.so.6 (0xb6ea6000)
libpthread.so.0 => /lib/arm-linux-gnueabi/libpthread.so.0 (0xb6e86000)
libdl.so.2 => /lib/arm-linux-gnueabi/libdl.so.2 (0xb6e7b000)
libcap.so.2 => /lib/arm-linux-gnueabi/libcap.so.2 (0xb6e70000)
libc.so.6 => /lib/arm-linux-gnueabi/libc.so.6 (0xb6d35000)
/lib/ld-linux.so.3 (0xb6fa6000)
libattr.so.1 => /lib/arm-linux-gnueabi/libattr.so.1 (0xb6d27000)
# nm -D /usr/lib/libstrongswan.so|grep auth_class
00036a50 D auth_class_names
答案 0 :(得分:2)
nm -D表示已定义符号auth_class_names
否:它显示auth_class_names
中定义了libcharon.so
un 。
libstrongswan提供了auth_class符号,但libcharon没有引用它。
再次出错:libcharon.so
引用该符号。
ldd /usr/lib/libstrongswan.so
你想要ldd /usr/lib/libcharon.so
。
您的问题很可能是neigher libcharon.so
,主要可执行文件与libstrongswan.so
相关联,因此当您动态加载libcharon.so
时,libstrongswan.so
无处可寻;因此加载失败,带有未定义的符号。
有几种可能的解决方案,从更正确到更黑的排序:
将libcharon.so
与libstrongswan.so
相关联。加载libcharon.so
将加载其所有依赖项(现在将包含libstrongswan.so
,并且将找到该符号)。
将charon
二进制文件与libstrongswan.so
相关联。
libstrongswan.so
之前动态加载libcharon.so
。LD_PRELOAD=libstrongswan.so
答案 1 :(得分:1)
实际上“U”表示该符号未定义。 ldd在libcharon.so.0
上展示了什么?您应该在libstrongswan.so.0
找到auth_class_names
。