1

如果我在这里遗漏了一些明显的东西,请原谅我。我正在为另一个平台开发一些应用程序,并且我所有的专有库都安装到 /app/lib。为了促进这一点,我为我的每个二进制文件指定了一个运行时库路径作为“/app/lib”。这很好用;但是,它要求在链接时路径“/app/lib”存在于我的构建环境中(即使该目录为空)。我正在使用 NetBeans,这可能会使事情复杂化,但我可以看到“-Wl,-rpath /app/lib”被传递给 gcc。

我想避免在我的构建环境中创建一个空的“/app/lib”,但我不想更改目标平台上的文件结构。如果我从构建环境中删除 /app/lib,则在构建时会出现错误,无法找到它。有没有办法指定运行时搜索路径而不需要它在链接时存在?

4

2 回答 2

1

我认为您正在寻找的选项是-Wl,-rpath-link,/path/to/libraries. 您需要同时使用这两个选项。

然后,链接器将用于-rpath-link在链接时查找库,但它会将-rpath值编码到二进制文件中以供在运行时使用。

于 2012-04-04T18:40:18.693 回答
1

语法应该是“-Wl,-rpath -Wl,/app/lib”(“-Wl,-rpath,/app/lib”也可以)。这是 NetBeans 中的一个错误。它之所以不那么重要(以及为什么我之前没有注意到这一点)是链接时搜索路径似乎会延续到运行时。因为 NetBeans 没有在 -rpath 和 /app/lib 之间放置逗号,所以 /app/lib 被解释为链接时搜索路径。结果,我的依赖库仍然在运行时在适当的位置找到,但由于它是链接时依赖项,链接失败,因为 /app/lib 不存在。

于 2012-05-22T17:43:48.470 回答