-rpath和-L有什么区别?

Cra*_*urg 78 linker gcc shared-libraries ld

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

der*_*ert 90

您必须阅读一些过时的联机副本(强调添加):

-rpath = dir
      将目录添加到运行时库搜索路径.
      将ELF可执行文件与共享对象链接时使用此方法.所有-rpath
      参数都连接在一起并传递给运行时链接程序,后者
      使用它们在运行时查找共享对象.

-L searchdir
--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`. (12认同)
  • 后续问题添加于:http://stackoverflow.com/questions/28096133/why-is-l-needed-when-rpath-is-used (4认同)
  • 我仍然不明白为什么两者都需要.我和上面的nm有相同的经验.图书馆在建设时需要哪些信息?除了可能的h文件,原因.但那是我猜的另一件事...... (3认同)