LD_LIBRARY_PATH正常工作,但LD_PRELOAD无法正常工作

时间:2017-03-18 11:54:10

标签: c compilation

我有两个文件:./ 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行?

非常感谢,

0 个答案:

没有答案