我试图让我的可执行文件从它自己的目录加载一些共享库,所以我决定添加.
到 rpath。但是当我尝试运行它时,它找不到.so。这是 readelf -d myexec 结果中感兴趣的部分:
Tag Type Name/Value
0x00000001 (NEEDED) Shared library: [libtoload.so.1]
0x00000001 (NEEDED) Shared library: [libpthread.so.0]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libc.so.6]
0x0000000f (RPATH) Library rpath: [$ORIGIN/.:.]
我的文件夹包含:
-rwxr-xr-x 1 root root 97148 Apr 3 12:10 libtoload.so.1
-rwxr-xr-x 1 root root 9873 Apr 3 10:10 myexec
错误 :
/some/folder/ # ./myexec
./myexec: error while loading shared libraries: libtoload.so.1: cannot open shared object file: No such file or directory
注意:我无权访问 LD_LIBRARY_PATH 环境变量(实际上它甚至不存在),其他库位于 /lib 文件夹中并且加载良好(但我不能放 libtoload.so.1)那里。我实际上是从另一台计算机交叉编译可执行文件,并且只能访问目标系统上的一些命令(没有工具链,主要是busybox命令)。
编辑: /lib/ld-linux.so.3 --library-path ./ ./myexec 有效