通过 ldd -r xxx.so 命令查看so库链接状态和错误信息
ldd命令,可以查看对应的可执行文件或库文件依赖哪些库,但可执行文件或库文件要求与操作系统的编译器类型相同,即电脑是X86的GCC编译器,那么无法通过ldd命令查看ARM交叉编译器编译出来的可执行文件或库文件。
如果想在Ubuntu等Linux宿主机上查看ARM交叉编译好的可执行程序和库文件的相关依赖关系,可以通过以下命令:
readelf -d xxx.so | grep NEEDED
-
# 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]
-
$ ldd -r libpathplan.so
-
linux-vdso.so.1 => (0x00007ffec1bd8000)
-
libstdc++.so.6 => /usr/lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007f186cc0a000)
-
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f186c901000)
-
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007f186c6eb000)
-
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f186c321000)
-
/lib64/ld-linux-x86-64.so.2 (0x00007f186d27a000)
-
undefined symbol: pthread_create (./libpathplan.so)
-
undefined symbol: _ZN12ninebot_algo10AprAlgoLog9instance_E (./libpathplan.so)
-
undefined symbol: _ZN2cv3maxERKNS_3MatES2_ (./libpathplan.so)
-
undefined symbol: _ZN12ninebot_algo10AprAlgoLog8WriteLogE10LEVEL_TYPEPKcS3_z (./libpathplan.so)
-
undefined symbol: _ZN2cv6dilateERKNS_11_InputArrayERKNS_12_OutputArrayES2_NS_6Point_IiEEiiRKNS_7Scalar_IdEE (./libpathplan.so)
-
undefined symbol: _ZN2cvgtERKNS_3MatEd (./libpathplan.so)
-
undefined symbol: _ZN2cv8fastFreeEPv (./libpathplan.so)
-
undefined symbol: _ZN2cv3Mat5setToERKNS_11_InputArrayES3_ (./libpathplan.so)
-
undefined symbol: _ZN12ninebot_algo10AprAlgoLog9instance_E (./libpathplan.so)
可以看到有好多 undefined symbol ,其中就有提到的 _ZN12ninebot_algo10AprAlgoLog9instance_E 错误