可执行文件似乎无法解析链接库中的符号。 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
nm -D 显示符号 auth_class_names 已定义
否:这表明auth_class_names
is un定义于libcharon.so
.
libstrongswan 提供了 auth_class 符号,但 libcharon 没有引用它。
又错了:libcharon.so
does参考符号。
ldd /usr/lib/libstrongswan.so
That's not你想要什么。你要ldd /usr/lib/libcharon.so
.
您的问题很可能是邻居libcharon.so
,主要可执行文件也没有链接到libstrongswan.so
,所以当你动态加载时libcharon.so
, libstrongswan.so
无处可寻;因此加载失败并出现未定义的符号。
有几种可能的解决方案,按从更正确到更hacky的顺序排列:
Link libcharon.so
反对libstrongswan.so
。加载中libcharon.so
将加载其所有依赖项(现在包括libstrongswan.so
,并且将找到该符号)。
Link charon
二元反对libstrongswan.so
.
- 动态加载
libstrongswan.so
before你加载libcharon.so
.
LD_PRELOAD=libstrongswan.so
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)