C LD_库_路径工作,但LD_预加载不工作

C LD_库_路径工作,但LD_预加载不工作,c,compilation,C,Compilation,我有两个文件:./a.out和libasm.so 我可以使用LD_LIBRARY_PATH执行,没有任何问题: $> export LD_LIBRARY_PATH=$PWD $> ./a.out 42 但是,如果我重置LD_LIBRARY_路径并使用LD_PRELOAD,它将不再工作: $> export LD_LIBRARY_PATH= $> LD_PRELOAD=./libasm.so ./a.out ./a.out: error while loading sha

我有两个文件:./a.out和libasm.so

我可以使用LD_LIBRARY_PATH执行,没有任何问题:

$> export LD_LIBRARY_PATH=$PWD
$> ./a.out
42
但是,如果我重置LD_LIBRARY_路径并使用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_预加载使其工作(并且没有LD_库路径)

汇编如下:

$> 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。因此,第一行被正确找到,但第二行没有找到。为什么有两行而不是一行


非常感谢,

“我必须使用LD\U PRELOAD”-为什么必须?这是我学校的一个科目,该科目允许我们在设置
LD\U PRELOAD
时使用LD\U PRELOAD(但不是LD\U LIBRARY\u路径)缺少
导出
。不要在列表中包含
a.out
ldd/home/Nicolas/rendu/Assembleur/asm\minilibc/libasm.so
file/home/Nicolas/rendu/Assembleur/asm\minilibc/libasm.so
,以及
ls-l/home/Nicolas/rendu/Assembleur/asm\asm\minilibc/libasm.so
?这似乎是您的
libasm。因此
共享对象本身可能具有动态依赖性,这可以解释您观察到的行为。那么
libasm.so
是如何创建的呢?也许你可以从
LD\u DEBUG=all LD\u PRELOAD=./libasm.so./a.out
开始,这可能会对这个问题有所帮助