链接库搜索问题
查看某个 bin/so 依赖的链接库
ldd $bin
ldd -v $bin
动态连接库加载顺序
LD_PRELOAD > RPATH > LD_LIBRARY_PATH
使用 LD_PRELOAD
LD_PRELOAD=/opt/libstdcxx/lib64/libstdc++.so.6 $bin # 预加载 libstdc++.so.6
Note libc.so.6 预加载问题
无法预加载 libc.so.6 需要通过ld-linux-x86-64.so.2
来加载对应的 libc.so,其中/opt/glibc-2.18/lib/
是对应动态链接库路径,里面需要有libc.so.6
,libdl.so
等/opt/glibc-2.18/lib/ld-linux-x86-64.so.2 --library-path /opt/glibc-2.18/lib/ $bin
使用 RPATH
RPATH 可以通过环境变量或者是写入到binary中
# 环境变量
LD_RUN_PATH=XXX/lib
gcc -Xlinker -rpath=/default/path/to/libraries -Xlinker -I/default/path/to/libraries/ld.so program.c
-Wl,--dynamic-linker="${glibc_install}/lib/ld-linux-x86-64.so.2"
使用 LD_LIBRARY_PATH
export LD_LIBRARY_PATH=XXX