-rpath和-L有什么区别?


89

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


2
也许您在想-rpath-link
AMS

Answers:


106

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

-rpath = dir
      将目录添加到运行时库搜索路径。
      在将ELF可执行文件与共享库链接时使用。所有-rpath
      参数都被串联并传递到运行时链接程序,该链接程序
      使用它们在运行时定位共享对象

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

因此,-L告诉您ld在链接时在何处寻找要链接的库。例如,当您在构建树中针对库进行构建时,将使用,将其放置在常规系统库路径中make install--rpath另一方面,将路径存储在可执行文件中,以便运行时动态链接程序可以找到这些库。当您的库不在系统库搜索路径中时,可以使用它。


16
注意:1.大多数时候,一个需要-rpath=/some/weird/path,一个也需要-L /some/weird/path。2.随gcc需使用-Wl,-rpath=dir
n。代词

4
我仍然不明白为什么两者都需要。我和上面的nm有相同的经验。在构建时需要从库中获取什么信息?除了可能的h文件之外,还有其他原因。但这是我猜想的另一件事...
Fredrik Johansson

1
@FredrikJohansson对于一个新问题,这将是一个合理的主题(当然,假设尚未被提出)。至少需要可用的符号,但是可能还有其他事情。
derobert

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.