我有两个文件:./ a.out和libasm.so,
我可以使用LD_LIBRARY_PATH执行而不会出现任何问题:
$> export LD_LIBRARY_PATH=$PWD
$> ./a.out
42
但是,如果我重置了LD_LIBRARY_PATH并且我使用了LD_PRELOAD,那么它就不再工作了:
$> export LD_LIBRARY_PATH=
$> LD_PRELOAD=./libasm.so ./a.out
./a.out: error while loading shared libraries: libasm.so: cannot open shared object file: No such file or directory
我该怎么做才能解决这个问题?我必须使用LD_PRELOAD使其工作(并且没有LD_LIBRARY_PATH)
汇编如下:
$> gcc main.c -L. -lasm
使用以下命令创建库:
$> nasm -f elf64 strlen.S -o strlen.o && gcc -shared strlen.o -o libasm.so
ldd命令提供以下内容:
$> ldd ./a.out
linux-vdso.so.1 (0x00007ffdda9fe000)
/home/Nicolas/rendu/Assembleur/asm_minilibc/libasm.so (0x00007fb468f28000)
libasm.so => not found
libc.so.6 => /lib64/libc.so.6 (0x00007fb468b48000)
/lib64/ld-linux-x86-64.so.2 (0x0000555c0b2dd000)
$> ldd /home/Nicolas/rendu/Assembleur/asm_minilibc/libasm.so
linux-vdso.so.1 (0x00007fffe09bc000)
libc.so.6 => /lib64/libc.so.6 (0x00007fb3390c2000)
/lib64/ld-linux-x86-64.so.2 (0x000055789183a000)
$> ls -l /home/Nicolas/rendu/Assembleur/asm_minilibc/libasm.so
-rwxrwxr-x. 1 Nicolas Nicolas 7728 18 mars 14:24 /home/Nicolas/rendu/Assembleur/asm_minilibc/libasm.so
两行是指libasm.so,第一行是正确找到的,但第二行未找到。为什么有2行而不是1行?
非常感谢,