Linux中有兩類函數(shù)庫,動態(tài)庫和靜態(tài)庫
靜態(tài)庫:
這類庫一般都是以.a為后綴名的文件,利用靜態(tài)庫函數(shù)編譯成的文件比較大,因為整個函數(shù)庫的所有數(shù)據(jù)都會被整合進目標代碼中。
編譯后的執(zhí)行程序就不需要外部的函數(shù)庫支持,但也有其缺點,就是一旦靜態(tài)函數(shù)庫改變了,那么程序就必須重新編譯。
動態(tài)庫:
這類庫的一般都是以.so為后綴名的,相對于靜態(tài)庫函數(shù)庫來說,動態(tài)函數(shù)庫在編譯的時候并沒有被編譯進目標代碼中。當程序執(zhí)行到相關(guān)函數(shù)時才調(diào)用該函數(shù)庫里的
相應(yīng)函數(shù),因此動態(tài)庫函數(shù)庫所產(chǎn)生的可執(zhí)行文件比較小,由于函數(shù)庫沒有被整合到程序之中,所以這也就少了靜態(tài)庫鎖有的缺點。
Linux系統(tǒng)中的系統(tǒng)缺省庫有/lib /usr/lib /usr/local/lib
不管是何種庫文件,都是由.o文件生成的。
下面我就來講解下著兩種庫的生成方法及步驟:
動態(tài)庫:
對咬編譯生成庫的文件執(zhí)行下面命令即可:
#gcc -shared funName.c -o libLibName.so
靜態(tài)庫:
#gcc -c funName.c
#ar cr libLibName.a funName.o
輕重funName.o是第一步生成的文件
聯(lián)系客服