【发布时间】:2016-02-20 14:39:26
【问题描述】:
我在使用 LD_PRELOAD 加载我的 so 时遇到了一些麻烦。
步骤如下:
-
libtest.c:
void fun() { return } gcc -o libtest.so libtest.c -fPIC --shared
导出 LD_PRELOAD=
pwd/libtest.so-
main.c
extern void fun(); void main() { fun() } gcc -o 主 -L。 main.c -ltest
-
然后
ldd mainldd main linux-vdso.so.1=>(0x00007ffff7ffd000) /home/shiyanlou/Code/libtest.so(0x00007ffff7df9000) libtest.so=>not found libc.so.6=>/lib/x86_64-linux-gnu/libc.so.6 (0x00007ffffa29000) /lib64/ld-linux-x86-64.so.2 (0x0000555555554000) - 执行主
./main它促进: 加载共享库时出错:libtest.so。无法打开共享对象文件:没有这样的文件或目录。
不知道为什么导出LD_PRELOAD变量后提示找不到libtest.so。但是,我也尝试使用 LD_PRELOAD 指定不同的共享库(不是“libc.so”)来注入 malloc 函数,它可以工作! 为什么 LD_PRELOAD 只对链接时未使用的共享库有效???
【问题讨论】:
标签: gcc shared-libraries shared ldd ld-preload