RPATH等同于可执行文件

时间:2011-03-31 19:37:33

标签: c++ exec rpath

我有一个c ++共享库,它作为其正常行为fork()/ execs()的一部分,包含一些不稳定的遗留代码。除了这个库之外,这个可执行文件没有用,所以我想避免将它放在PATH目录中。我还希望能够在不同的位置安装多个副本,因此不希望硬编码路径。有没有相当于RPATH的东西允许exec()找到这个可执行文件?或者,是否可以从库本身查询共享库的rpath?

编辑:这篇文章暗示后者是可能的。如果有人知道问题的答案,我会保持公开。 Is there a way to inspect the current rpath on Linux?

2 个答案:

答案 0 :(得分:1)

您始终可以使用getenv来获取共享对象中的环境,但RPATH是否真的要用于此目的?让共享对象在用户的主目录(或自定义环境变量)中有某种配置文件告诉它使用哪个位置运行外部二进制文件,这不是更好吗?

答案 1 :(得分:0)

我认为最好的方法是设置环境变量并使用execve()来运行二进制文件。大概你可以设置PATH然后execve()一个shell,它将使用PATH来查找可执行文件的副本。等效的库是将LD_LIBRARY_PATHexecve()设置为将此库作为依赖项的二进制文件。

在任何一种情况下,您都不会更改外部环境,只会制作与execve()一起使用的修改后的副本。