-rpath和-L有什么区别?

时间:2011-12-12 22:58:42

标签: gcc linker shared-libraries ld

gccld提供了许多方法来指定库的搜索路径 - 其中包括-rpath-L标记。这些联机帮助页显示这两个标志之间没有差异,有效地说每个标志都会向库搜索路径添加一个库。然而,两个标志完全同样的事情似乎很奇怪。这两个选项之间有什么区别?

1 个答案:

答案 0 :(得分:83)

您必须阅读一些过时的联机副本(重点已添加):

  

-rpath = DIR
  将目录添加到运行时库搜索路径。这是用的   将ELF可执行文件与共享对象链接时。所有-rpath
  参数被连接并传递给运行时链接器,其中包含   使用它们在运行时找到共享对象。

VS。

  

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

因此,-L告诉ld在链接时查找要链接的库的位置。当你在构建树中构建库时,可以使用它(例如),它将被make install放入正常的系统库路径中。另一方面,--rpath将该路径存储在可执行文件中,以便运行时动态链接器可以找到库。当库在系统库搜索路径之外时,您可以使用它。