如果我在这里遗漏了一些明显的东西,请原谅我。我正在为另一个平台开发一些应用程序,并且我的所有专有库都安装到/ app / lib。为此,我将每个二进制文件的运行时库路径指定为“/ app / lib”。这很好用;但是,它要求在链接时我的构建环境中存在路径“/ app / lib”(即使该目录为空)。我正在使用NetBeans,这可能使事情变得复杂,但我可以看到“-Wl,-rpath / app / lib”被传递给gcc。
我想避免在构建环境中创建一个空的“/ app / lib”,但我不想更改目标平台上的文件结构。如果我从构建环境中删除/ app / lib,则在构建时无法找到它时会出错。有没有办法指定运行时搜索路径而不需要它在链接时存在?
答案 0 :(得分:1)
我认为您正在寻找的选项是-Wl,-rpath-link,/path/to/libraries
。您需要一次使用两个选项。
然后链接器将使用-rpath-link
在链接时查找库,但它会将-rpath
值编码为二进制文件以供在运行时使用。
答案 1 :(得分:1)
语法应为“-Wl,-rpath -Wl,/ app / lib”(“ - WI,-rpath,/ app / lib”也适用)。这是NetBeans中的一个错误。它之所以不重要(以及为什么我之前没有注意到这一点)的原因是链接时搜索路径似乎会延续到运行时。由于NetBeans未在-rpath和/ app / lib之间放置逗号,因此/ app / lib被解释为链接时搜索路径。因此,我的依赖库仍然在运行时在适当的位置找到,但由于它是链接时依赖性,链接失败,因为/ app / lib不存在。