我在使用 LD_PRELOAD 加载我的 so 时遇到了一些麻烦。
步骤如下:
libtest.c:
void fun() { return }
gcc -o libtest.so libtest.c -fPIC --shared
导出 LD_PRELOAD=
pwd
/libtest.so主程序
extern void fun(); void main() { fun() }
gcc -o 主 -L。main.c -ltest
然后
ldd main
ldd 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
它促进的main:加载共享库时出错:libtest.so。无法打开共享对象文件:没有这样的文件或目录。
我想知道为什么在我导出 LD_PRELOAD 变量后提示找不到 libtest.so。但是,我也尝试使用 LD_PRELOAD 指定不同的共享库(不是“libc.so”)来注入 malloc 函数,它有效!为什么 LD_PRELOAD 仅适用于链接时未使用的共享库???