标题太拗口,用英语复述一下:
Why cross compile linker(collector) is not able to find symbols from a shared libary whose path is already in rpath
?
问题是这样的,我们在编译一个程序的时候,报了很多undefined reference to
错误。以下是最终编译命令:
/usr/bin/aarch64-linux-gnu-g++ \
-v \
--sysroot=/home/john.doe/gc/sysroot_arm64v8_ubuntu_bionic \
-frecord-gcc-switches \
-O2 -g -DNDEBUG \
CMakeFiles/test_rmw_impl_id_check_exe.dir/rcl/test_rmw_impl_id_check_exe.cpp.o \
-o test_rmw_impl_id_check_exe \
-Wl,-rpath,/path_to_lib_b... \
../librcl.so \
/home/john.doe/gc/liba.so \
-lpthread \
-ldl \
简单来讲,test_rmw_impl_id_check_exe
被明文链接到liba.so
,而liba.so
又需要用libb.so
里面的一些符号(可以从以下代码看出)
$ readelf -g /home/john.doe/gc/liba.so | grep NEEDED
0x0000000000000001 (NEEDED) Shared library: [libb.so]
....
可以很明显的看到libb.so
的目录已经很明显地存在于rpath
里了,但是 linker 死活都是找不到这些符号。请问各位大神,有什么好办法进行 debug 么?谢谢。
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.