【发布时间】:2015-10-13 19:00:46
【问题描述】:
由于各种原因,主要与惯性有关,我们没有make install 目标。
相反,我们将大型 C++ 代码库直接构建到类似 FHS 的树中;
output/
bin/
lib/
etc/
...
我们最近将一些第三方库切换到动态链接,因此我们将一些 .so 库推送到 lib/。
现在,我们习惯于从bin/ 启动我们的可执行文件,但这不再有效,因为加载程序不会搜索我们的lib/ 目录。
LD_LIBRARY_PATH 可以解决这个问题,但我们不希望在每次可执行调用之前都提供它,并且我们不想将它粘在 shell 环境中,因为我们通常会在许多不同的构建之间切换树在同一个壳里。
我们考虑在生成的 ELF 中添加一个 rpath 条目,但相对路径通常根据 $PWD 解析,而不是可执行文件的目录名。
有没有办法让加载程序在 dirname(argv[0])/../lib 中查找 .so 库?
基本上,我知道有很多方法可以改变我们的习惯来完成这项工作(并且可能应该),但我们现在不想这样做,所以我们可以强制 Linux so 加载程序做我们想做的事?谢谢!
【问题讨论】:
标签: c++ linux shared-libraries