一、簡介
對頭文件與庫文件的搜索路徑不太清楚,編譯、運行時老碰到問題,ldd查看程序的鏈接時,總是出現unkown鏈接.
二、頭文件
gcc 在編譯時尋找所需要的頭文件 :
1)搜尋會從-I開始
2)然后找gcc的環境變量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH (這些變量在windows下對應的是include環境變量)
3)再找內定目錄
/usr/include /usr/local/include /usr/lib/gcc-lib/i386-linux/2.95.2/include /usr/lib/gcc-lib/i386-linux/2.95.2/../../../../include/g++-3 /usr/lib/gcc-lib/i386-linux/2.95.2/../../../../i386-linux/include
庫文件, 如果裝gcc的時候,有給定prefix,那么就是
/usr/include prefix/include prefix/xxx-xxx-xxx-gnulibc/include prefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include
三、庫文件
編譯的時候:
1)gcc會去找-L
2)再找gcc的環境變量LIBRARY_PATH
3)再找內定目錄 /lib:/usr/lib: /usr/local/lib:這是當初compile gcc時寫在程序內的
四、運行時動態庫的搜索路徑
1、在配置文件/etc/ld.so.conf中指定動態庫搜索路徑
2、通過環境變量LD_LIBRARY_PATH指定動態庫搜索路徑(當通過該環境變量指定多個動態庫搜索路徑,路徑之間用冒號":"分隔)
注意:HP-UX對應的SHLIB_PATH環境變量,AIX對應的是LIBPATH環境變量,windows對應的是lib環境變量
3、在編譯目標代碼時指定該程序的動態庫搜索路徑(還可以在編譯目標代碼時指定程序的動態庫搜索路徑)
這是通過gcc 的參數"-Wl,-rpath,"指定。當指定多個動態庫搜索路徑時,路徑之間用冒號":"分隔.
4、默認的動態庫搜索路徑/lib、/usr/lib.,動態庫的搜索路徑搜索的先后順序是:
1)編譯目標代碼時指定的動態庫搜索路徑; 2)環境變量LD_LIBRARY_PATH指定的動態庫搜索路徑; 3)配置文件/etc/ld.so.conf中指定的動態庫搜索路徑; 4)默認的動態庫搜索路徑/lib /usr/lib。
五、常用環境變量
1)LIBRARY_PATH和LD_LIBRARY_PATH