一、頭文件
gcc 在編譯時(shí)尋找所需要的頭文件 :
※搜尋會(huì)從-I開(kāi)始
※然后找gcc的環(huán)境變量 C_INCLUDE_PATH,CPLUS_INCLUDE_PATH,OBJC_INCLUDE_PATH
※再找內(nèi)定目錄
/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
庫(kù)文件但是如果裝gcc的時(shí)候,是有給定的prefix的話,那么就是
/usr/include
prefix/include
prefix/xxx-xxx-xxx-gnulibc/include
prefix/lib/gcc-lib/xxxx-xxx-xxx-gnulibc/2.8.1/include
二、庫(kù)文件
編譯的時(shí)候:
※gcc會(huì)去找-L
※再找gcc的環(huán)境變量LIBRARY_PATH
※再找內(nèi)定目錄 /lib:/usr/lib: /usr/local/lib:這是當(dāng)初compile gcc時(shí)寫(xiě)在程序內(nèi)的
三、運(yùn)行時(shí)動(dòng)態(tài)庫(kù)的搜索路徑 1、在配置文件/etc/ld.so.conf中指定動(dòng)態(tài)庫(kù)搜索路徑 2、通過(guò)環(huán)境變量LD_LIBRARY_PATH指定動(dòng)態(tài)庫(kù)搜索路徑(當(dāng)通過(guò)該環(huán)境變量指定多個(gè)動(dòng)態(tài)庫(kù)搜索路徑時(shí),路徑之間用冒號(hào)":"分隔)
3、在編譯目標(biāo)代碼時(shí)指定該程序的動(dòng)態(tài)庫(kù)搜索路徑(還可以在編譯目標(biāo)代碼時(shí)指定程序的動(dòng)態(tài)庫(kù)搜索路徑。
這是通過(guò)gcc 的參數(shù)"-Wl,-rpath,"指定。當(dāng)指定多個(gè)動(dòng)態(tài)庫(kù)搜索路徑時(shí),路徑之間用冒號(hào)":"分隔
4、默認(rèn)的動(dòng)態(tài)庫(kù)搜索路徑/lib /usr/lib
可以通過(guò)執(zhí)行可執(zhí)行文件pos得到的結(jié)果不同獲知其搜索到了哪個(gè)動(dòng)態(tài)庫(kù),從而獲得第1個(gè)動(dòng)態(tài)庫(kù)搜索順序,然后刪除該動(dòng)態(tài)庫(kù),
再執(zhí)行程序pos,獲得第2個(gè)動(dòng)態(tài)庫(kù)搜索路徑,再刪除第2個(gè)被搜索到的動(dòng)態(tài)庫(kù),
如此往復(fù),將可得到Linux搜索動(dòng)態(tài)庫(kù)的先后順序。
程序pos執(zhí)行的輸出結(jié)果和搜索到的動(dòng)態(tài)庫(kù)的對(duì)應(yīng)關(guān)系如表1所示
程序pos輸出結(jié)果 使用的動(dòng)態(tài)庫(kù) 對(duì)應(yīng)的動(dòng)態(tài)庫(kù)搜索路徑指定方式
./ ./libpos.so 編譯目標(biāo)代碼時(shí)指定的動(dòng)態(tài)庫(kù)搜索路徑
/root/test/env/lib /root/test/env/lib/libpos.so 環(huán)境變量LD_LIBRARY_PATH指定的動(dòng)態(tài)庫(kù)搜索路徑
/root/test/conf/lib /root/test/conf/lib/libpos.so 配置文件/etc/ld.so.conf中指定的動(dòng)態(tài)庫(kù)搜索路徑
/lib /lib/libpos.so 默認(rèn)的動(dòng)態(tài)庫(kù)搜索路徑/lib
/usr/lib /usr/lib/libpos.so 默認(rèn)的動(dòng)態(tài)庫(kù)搜索路徑/usr/lib
動(dòng)態(tài)庫(kù)的搜索路徑搜索的先后順序是:
1.編譯目標(biāo)代碼時(shí)指定的動(dòng)態(tài)庫(kù)搜索路徑;
2.環(huán)境變量LD_LIBRARY_PATH指定的動(dòng)態(tài)庫(kù)搜索路徑;
3.配置文件/etc/ld.so.conf中指定的動(dòng)態(tài)庫(kù)搜索路徑;
4.默認(rèn)的動(dòng)態(tài)庫(kù)搜索路徑/lib /usr/lib。 |
|