Linux中有兩類函數庫,動態庫和靜態庫
靜態庫:
這類庫一般都是以.a為後綴名的文件,利用靜態庫函數編譯成的文件比較大,因為整個函數庫的所有數據都會被整合進目標代碼中。
編譯後的執行程序就不需要外部的函數庫支持,但也有其缺點,就是一旦靜態函數庫改變了,那麼程序就必須重新編譯。
動態庫:
這類庫的一般都是以.so為後綴名的,相對於靜態庫函數庫來說,動態函數庫在編譯的時候並沒有被編譯進目標代碼中。當程序執行到相關函數時才調用該函數庫裡的
相應函數,因此動態庫函數庫所產生的可執行文件比較小,由於函數庫沒有被整合到程序之中,所以這也就少了靜態庫鎖有的缺點。
Linux系統中的系統缺省庫有/lib /usr/lib /usr/local/lib
不管是何種庫文件,都是由.o文件生成的。
下面我就來講解下著兩種庫的生成方法及步驟:
動態庫:
對咬編譯生成庫的文件執行下面命令即可:
#gcc -shared funName.c -o libLibName.so
靜態庫:
#gcc -c funName.c
#ar cr libLibName.a funName.o
輕重funName.o是第一步生成的文件