符号查找错误未定义符号,但所有符号似乎都存在

时间:2018-06-04 20:23:58

标签: linux ld elf

可执行文件似乎无法解析链接库中的符号。 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

2 个答案:

答案 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无处可寻;因此加载失败,带有未定义的符号。

有几种可能的解决方案,从更正确到更黑的排序:

  1. libcharon.solibstrongswan.so相关联。加载libcharon.so将加载其所有依赖项(现在将包含libstrongswan.so,并且将找到该符号)。

  2. charon二进制文件与libstrongswan.so相关联。

  3. 在加载libstrongswan.so之前动态加载libcharon.so
  4. LD_PRELOAD=libstrongswan.so

答案 1 :(得分:1)

实际上“U”表示该符号未定义。 ldd在libcharon.so.0上展示了什么?您应该在libstrongswan.so.0找到auth_class_names