首页 > 其他 > 详细

链接库搜索问题

时间:2021-05-07 14:43:24      阅读:16      评论:0      收藏:0      [点我收藏+]

查看某个 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

使用 patchelf 修改 rpatch

强制链接到其他的 glibc

gcc -Xlinker -rpath=/default/path/to/libraries -Xlinker -I/default/path/to/libraries/ld.so program.c

使用 LD_LIBRARY_PATH

export LD_LIBRARY_PATH=XXX

参考

https://stackoverflow.com/questions/55186770/can-ld-preload-be-used-to-load-different-versions-of-glibc

链接库搜索问题

原文:https://www.cnblogs.com/stdpain/p/14738714.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!