靜態庫在編譯鏈結是就把庫里頭的**提取出來放到可執行檔案中,程式的執行不在依賴庫。
動態庫在編譯鏈結時只記錄要用的名字在哪個庫檔案中,執行時才從庫檔案中查詢這個名字(函式或著變數)並訪問它。
之間的區別:生成可執行檔案大小、可執行檔案執行速度、庫生效方式
(1)靜態庫 lib***.a
1)生成靜態庫
寫的c語言程式不應該有main函式
gcc -c ***1.c
gcc -c ***2.c
寫的頭函式***.h中存放函式的宣告和全域性變數的宣告(extent int a之類的)
ar -r lib***.a ***1.o ***2.o
2)使用庫
寫c語言程式u***xx.c,包含***.h標頭檔案,那麼在程式中可以呼叫庫中的函式或者全域性變數。
方法一:gcc -c u***xx.c; gcc u***xx.o lib***.a
方法二:gcc -c u***xx.c; gcc u***xx.o l*** -l. (其中l***表示lib庫lib***.a檔案,***表示庫名;-l.表示當前的目錄下查詢庫檔案lib***.a)
方法三:先設定全域性環境變數library_path為庫檔案所在的目錄,然後gcc -c u***xx.c; gcc u***xx.o l***
3)檢視靜態庫
ar -t lib***.a //檢視靜態庫中鏈結的檔案
nm lib***.a //檢視靜態庫中鏈結文集及其中的函式
(2)動態庫 lib***.so
1)生成動態庫
寫的c語言程式不應該有main函式
gcc -c -fpic ***1.c ***2.c;
gcc -shared -o lib***.so ***1.o ***2.o;
2)使用動態庫
編譯時:
寫c語言程式u***xx.c
方式一:gcc -c u***xx.c; gcc u***xx.o l*** -l.
方式二:先設定全域性環境變數library_path為庫檔案所在的目錄,然後gcc -c u***xx.c; gcc u***xx.o l***
執行時:
方式一:把庫檔案放在系統標準庫目錄,/urs/lib或/lib目錄中,就可以執行可執行檔案了。
方法二:gcc -c u***xx.c; gcc u***xx.o l*** -l. (其中l***表示lib庫lib***.a檔案,***表示庫名;-l.表示當前的目錄下查詢庫檔案lib***.a)
方式三:先設定全域性環境變數ld_library_path為動態庫檔案所在的目錄,然後執行可執行檔案。
靜態庫和動態庫的區別
windows vc 靜態庫 在編譯的時候載入生成目標檔案,在執行時不用載入庫,在執行時對庫沒有依賴性。動態庫 在目標檔案執行時載入,手動載入,且對庫有依賴性。兩者區別 一,靜態庫的使用需要 1 包含乙個對應的標頭檔案告知編譯器lib檔案裡面的具體內容 2 設定lib檔案允許編譯器去查詢已經編譯好的...
靜態庫和動態庫的區別
靜態庫在程式編譯時被連線到目標 中,程式執行時不再需要靜態庫 動態庫在編譯時並不被連線到目標 中,而是程式執行時才被載入,執行時仍然需要動態庫存在。靜態庫的命名規範是以 lib為字首,緊接著是靜態庫名,副檔名是.a 先將檔案編譯成 o 檔案然後是編譯成靜態檔案 動態庫檔案在檔名前加 lib字首,擴充...
靜態庫和動態庫的區別
庫的作用 庫是共享程式 的方式,一般分為靜態庫和動態庫。庫實現了某些特定的功能模組化。方便分享和使用!異同點 2.靜態庫和動態庫有什麼特點?不同點 靜態庫 鏈結時完整地拷貝至可執行檔案中,被多次使用就有多份冗餘拷貝。動態庫 鏈結時不複製,程式執行時由系統動態載入到記憶體,供程式呼叫,系統只載入一次,...