-rpath和-L有什么区别?

gccld提供了许多方法来指定库的searchpath,其中包括-rpath-L标志。 手册页显示这两个标志之间没有区别,有效地说每个标志添加一个库到库searchpath。 然而,两个国旗做的事情完全一样,这似乎很奇怪。 这两种select之间有什么区别?

你必须阅读一些过时的手册(重点补充):

-rpath = DIR
将目录添加到运行时库searchpath。 这是使用
当链接一个ELF可执行文件与共享对象。 所有-rpath
参数串联并传递给运行时链接程序
使用它们在运行时定位共享对象

-L searchdir
–librarypath= searchdir
将pathsearchdir添加到ld将要search的path列表中
归档库和ld控制脚本。

所以, -L告诉ld在链接时要在哪里寻找链接的库。 在构build树中的库时,可以使用这个(例如),它将通过make install放入正常的系统库path中。 另一方面, --rpath将该path存储在可执行文件中,以便运行时dynamic链接程序可以find这些库。 当您的库位于系统库searchpath之外时,可以使用它。