标题太拗口,用英语复述一下:
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 么?谢谢。
1
dangyuluo OP 嘿,我发现用`rpath-link`的话就可以。
|
2
choury 2019-10-23 13:40:50 +08:00
rpath 是给运行时 ld 找 so 时用的,linker 只是把他写到 elf 里面,编译的时候不会关心这个路径的
|