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