我正在尝试使用ubuntu-20(ld-linux.so.2)
中的动态链接器的一些实践,但有一个奇怪的地方是,当前目录会自动包含在搜索列表中
我找不到如何执行此操作的任何说明
,因为手册页指定了搜索顺序,但没有关于当前目录的任何内容
(https://man7.org/linux/man-pages/man8/ld.so.8.html)
请您分享一下能做到这一点的原因?
测试的代码如下
$ cat foo.cpp
#include <iostream>
void whoami() {
std::cout << "I'm foo" << std::endl;
}
$ cat main.cpp
#include <iostream>
void whoami();
int main()
{
whoami();
return 0;
}
$ g++ -o libfoo.so -shared -fpic foo.cpp
$ g++ main.cpp -Wl,-Bdynamic libfoo.so
$ ./a.out
I'm foo
我添加了一些更多信息
如果取消设置LD_LIBRARY_PATH
,可执行文件将无法按预期运行
但我仍然感到困惑,因为LD_LIBRARY_PATH
没有如下所示的当前工作目录
$ pwd
/home/mk/work/test/ex2/build
$ echo $LD_LIBRARY_PATH
/home/mk/local/lib:
并且LD_RUN_PATH
也是清除的
$ echo $LD_RUN_PATH
在进行一些测试后,
我发现,如果在LD_LIBRARY_PATH
字符串中添加冒号(:
),
当前工作目录将自动包含在搜索列表中
原因可以在下面几页中找到
在Linux上解析$path时,我们必须考虑哪些特殊情况?
当nounset时,如何在shell中智能追加LD_LIBRARY_PATH