几种指定链接库搜索路径

时间:2024-04-15 22:47:34
 
-Wl,--rpath=
指定编译和运行期间的库搜索路径RPATH,这个路径会写入到编译好的二进制文件中。
 
-Wl,--rpath=,--enable-new-dtags

指定编译和运行期间的库搜索路径RPATH和RUNPATH,这两个路径同样会写入到二进制文件中,但只有RUNPATH起作用,RPATH会被忽略掉。RUNPATH实际是RPATH的另一个版本,区别是RPATH不能被LD_LIBRARY_PATH覆盖,而RUNPATH则可以被LD_LIBRARY_PATH覆盖。

 
LD_RUN_PATH
全局环境变量,与-Wl,--rpath=作用相同,在没有指定-Wl,--rpath=时起作用。
 
-L
指定编译期间的库搜索路径,该路径不会被写入二进制文件中。如果-L与-Wl,--rpath=同时出现,则-Wl,--rpath=起作用。
 
LIBRARY_PATH
全局环境变量,与-L作用相同,在没有指定-L时起作用。
 
LD_LIBRARY_PATH
全局环境变量,指定运行期间的库搜索路径。
 
/etc/ld.so.conf
与LD_LIBRARY_PATH作用相同,需要结合ldconfig或重启将新加的路径写到/etc/ld.so.cache中起作用。
 
在运行期间,库搜索的先后顺序是

1. the RPATH binary header (set at build-time) of the library causing the lookup (if any)
2. the RPATH binary header (set at build-time) of the executable
3. the LD_LIBRARY_PATH environment variable (set at run-time)
4. the RUNPATH binary header (set at build-time) of the executable
5. /etc/ld.so.cache
6. base library directories (/lib and /usr/lib)