1. 程式人生 > >淺析靜態庫和動態庫的區別及linux下二者的生成和使用

淺析靜態庫和動態庫的區別及linux下二者的生成和使用

從程式設計的角度來講,庫檔案通常被分為靜態庫檔案和動態庫檔案,其目的在於將部分程式碼封裝在一起編譯後供自己或他人呼叫,好處在於編譯後的庫檔案看不到原始碼,可保密,同時不會因為不小心修改了函式而出問題,便於維護。但是二者之間存在一定的差異。
    1.靜態庫:
    靜態庫在Windows作業系統中是.lib檔案,在Linux下是.a檔案,相當於中間(.o)檔案的集合,是在程式連結時使用,講靜態庫中的檔案直接合成到最後的可執行檔案中去,程式執行時,則不再需要靜態庫的支援。在linux下靜態庫的生成及使用方法如下:
    (1)將所有的原始檔編譯生成中間檔案命令如下:
     gcc -c *.c
    (2)生成libxxx.a檔案(這裡的lib是必須有的,與後面的自定義的一起構成庫檔名稱)命令如下:
     ar crv libxxx.a *.o
    (3)靜態庫的使用
     gcc -o main main.c -L路徑 -l庫名(這裡的main.c是自己的程式碼名稱)
    2.動態庫(共享庫)
    動態庫在Windows作業系統中是.dll檔案,在Linux作業系統下是.so檔案,動態庫的使用是在使用動態庫的程式執行起來後,動態地將動態庫載入到記憶體上去執行,可以總結為不可執行的可執行檔案。在Linux下動態庫的生成及使用方法如下:
    (1)生成libxxx.so檔案(這裡的lib是必須有的,與後面的自定義的一起構成庫檔名稱)命令如下:
     gcc -shared -fPIC -o libxx.so *.c
    (2)動態庫的使用
     gcc -o main main.c -L路徑 -l庫名(這裡的main.c是自己的程式碼名稱)
    (3)使用動態庫的程式在執行時,需要單獨搜尋並載入動態庫檔案,做法如下:
     a.將動態庫拷貝到/lib或者/usr/lib任意一個路徑下
     b.設定環境變數
     c.修改配置檔案
     區分靜態庫和動態庫除了以上說的幾點外,還有一點可以很快區分。靜態庫刪除後程序無法使用,而動態庫刪除之後程式照樣可以正常執行。