如何使当前目录的路径在 bash 中可见,以便链接器可以看到?

如何使当前目录的路径在 bash 中可见,以便链接器可以看到?

我正在尝试加载共享库,但我在加载器查找的目录中没有其 .so 文件,所以我想设置一个环境目录。

$ ls # (current dir is bindir)
foo.c foo.h libfoo.so exe
$ path_to_dir=/home/user/bindir
$ $path_to_dir ./exe "bla bla"
bash: /home/user/bindir: Is a directory

这可能是微不足道的,但我通常不使用修改过的环境变量来运行程序,那么如何设置它呢?

如果我尝试$ export path_to_dir并运行它:

$ ./exe "bla bla"
./_exe: error while loading shared libraries: libfoo.so: cannot open shared object file: No such file or directory

那么如何修改我的dir的环境变量呢?

编辑:根据本教程:youtube 库教程,链接器无法看到库(libfoo.so在我的例子中是 )文件,因为它不搜索我当前的目录。标准库ld使用,我是这样理解的:

$ld --verbose | grep -i search_dir | awk '{print $1}' RS=';'
SEARCH_DIR("=/usr/local/lib/x86_64-linux-gnu")
SEARCH_DIR("=/lib/x86_64-linux-gnu")
SEARCH_DIR("=/usr/lib/x86_64-linux-gnu")
SEARCH_DIR("=/usr/lib/x86_64-linux-gnu64")
SEARCH_DIR("=/usr/local/lib64")
SEARCH_DIR("=/lib64")
SEARCH_DIR("=/usr/lib64")
SEARCH_DIR("=/usr/local/lib")
SEARCH_DIR("=/lib")
SEARCH_DIR("=/usr/lib")
SEARCH_DIR("=/usr/x86_64-linux-gnu/lib64")
SEARCH_DIR("=/usr/x86_64-linux-gnu/lib")

因此,该变量和上述变量之间的目的$path_to_dir是,我想ld通过设置$path_to_diras 环境变量来使我的目录可见(也尝试过export,但如您所见 - 无济于事)。那么如何使我的目录可见以便ld“查看”我的库并将其与位置无关程序(exe)链接?

答案1

看起来像是一个错字:

$path_to_dir ./exe "bla bla"

这个调用$path_to_dir有两个参数。很可能应该是

$path_to_dir/exe "bla bla"

这用一个参数调用一个可执行文件。您还可以在同一调用中设置 LD_LIBRARY_PATH:

LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$PWD $path_to_dir/exe "bla bla"

相关内容