0

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

编辑:这篇文章表明后者是可能的。如果有人知道所提问题的答案,我将保持开放状态。有没有办法检查 Linux 上的当前 rpath?

4

2 回答 2

1

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

于 2011-03-31T19:43:29.130 回答
0

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

在任何一种情况下,您都不会更改外部环境,只会制造与execve().

于 2011-06-15T02:31:22.157 回答