【问题标题】:What's the difference between -rpath and -L?-rpath 和 -L 有什么区别?
【发布时间】:2012-01-18 21:49:43
【问题描述】:

gccld 提供了许多方法来指定库的搜索路径,其中包括 -rpath-L 标志。手册页显示这两个标志之间没有区别,实际上是说每个标志都将一个库添加到库搜索路径中。然而,这两个标志完全做同样的事情似乎很奇怪。这两个选项之间有什么区别(如果有的话)?

【问题讨论】:

  • 也许你在想-rpath-link

标签: gcc linker shared-libraries ld


【解决方案1】:

您一定正在阅读一些过时的手册页副本(已添加重点):

-rpath=目录
将目录添加到 runtime 库搜索路径。这是用过的
将 ELF 可执行文件与共享对象链接时。所有 -rpath
参数被连接起来并传递给 runtime 链接器,该链接器
使用它们在运行时定位共享对象。

对比

-L 搜索目录
--library-path=searchdir
将路径 searchdir 添加到 ld 将搜索的路径列表
存档库和 ld 控制脚本。

所以,-L 告诉ld 在链接时在哪里寻找要链接的库。当您针对构建树中的库进行构建时,您可以使用它(例如),这些库将由make install 放入正常的系统库路径中。另一方面,--rpath 将该路径存储在可执行文件中,以便运行时动态链接器可以找到库。当您的库位于系统库搜索路径之外时,您可以使用它。

【讨论】:

  • 注意事项: 1. 大多数时候需要-rpath=/some/weird/path,也需要-L /some/weird/path。 2.gcc需要使用-Wl,-rpath=dir
  • 我仍然不明白为什么两者都需要。我和n.m有同样的经历。更多。在构建时需要从库中获取哪些信息?除了可能的 h 文件,原因。但我猜这是另一回事......
  • @FredrikJohansson 这对于一个新问题来说是一个合理的主题(当然,假设它还没有被问到)。至少需要可用的符号,但可能还有其他东西。
猜你喜欢
  • 2012-11-17
  • 2010-12-26
  • 2010-10-05
  • 2017-05-28
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 1970-01-01
  • 2015-03-21
相关资源
最近更新 更多