symbol lookup error:XXX.so: undefined symbol: 解决办法

通过 ldd -r xxx.so 命令查看so库链接状态和错误信息

ldd命令,可以查看对应的可执行文件或库文件依赖哪些库,但可执行文件或库文件要求与操作系统的编译器类型相同,即电脑是X86的GCC编译器,那么无法通过ldd命令查看ARM交叉编译器编译出来的可执行文件或库文件。

如果想在Ubuntu等Linux宿主机上查看ARM交叉编译好的可执行程序和库文件的相关依赖关系,可以通过以下命令:
readelf -d xxx.so | grep NEEDED

  1. # lichunhong @ lichunhong-ThinkPad-T470p in ~/Documents/src/effective_robotics_programming_with_ros-master/catkin_ws/src/pathPlan/lib on git:lichunhong/dev x [18:57:19]

  2. $ ldd -r libpathplan.so

  3. linux-vdso.so.1 => (0x00007ffec1bd8000)

  4. libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f186cc0a000)

  5. libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f186c901000)

  6. libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f186c6eb000)

  7. libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f186c321000)

  8. /lib64/ld-linux-x86-64.so.2 (0x00007f186d27a000)

  9. undefined symbol: pthread_create (./libpathplan.so)

  10. undefined symbol: _ZN12ninebot_algo10AprAlgoLog9instance_E (./libpathplan.so)

  11. undefined symbol: _ZN2cv3maxERKNS_3MatES2_ (./libpathplan.so)

  12. undefined symbol: _ZN12ninebot_algo10AprAlgoLog8WriteLogE10LEVEL_TYPEPKcS3_z (./libpathplan.so)

  13. undefined symbol: _ZN2cv6dilateERKNS_11_InputArrayERKNS_12_OutputArrayES2_NS_6Point_IiEEiiRKNS_7Scalar_IdEE (./libpathplan.so)

  14. undefined symbol: _ZN2cvgtERKNS_3MatEd (./libpathplan.so)

  15. undefined symbol: _ZN2cv8fastFreeEPv (./libpathplan.so)

  16. undefined symbol: _ZN2cv3Mat5setToERKNS_11_InputArrayES3_ (./libpathplan.so)

  17. undefined symbol: _ZN12ninebot_algo10AprAlgoLog9instance_E (./libpathplan.so)

可以看到有好多 undefined symbol ,其中就有提到的 _ZN12ninebot_algo10AprAlgoLog9instance_E 错误

你可能感兴趣的:(C++编程)