1、靜態庫
靜態函式庫,是函式執行前(編譯)就加到目標程式中去了。
優點:
(1)、 程式大。
(2)、鏈結時完整地拷貝至可執行檔案中,別多次使用就有多份冗餘拷貝。
(3)、更新,部署,發布較為麻煩
2,、動態庫
動態函式庫,是程式執行時(臨時)動態到目標程式中去
優點:
(1)、執行慢
(2)、發布程式需要提供依賴的動態庫。
以上部分出自:
(一)、靜態庫的製作
格式: lib***.a
庫名為***,字尾是 .a
步驟:原材料:源**.c 或 .cpp
(a)用.c檔案生成 .o檔案——例:gcc jia.c -c
(b)***.o檔案生成***.a靜態庫檔案——例:ar rcs libtest.a jia.o(可以打包多個 .o檔案)
例子:
(二)、靜態庫的使用(注意需要有標頭檔案)
步驟:(a)編譯:gcc jiamian.c -ltest -l ./ -o aaa
說明:(b)執行:做完步驟(a)就可以執行可執行檔案了主函式c檔案 -l庫名 -l 路徑 -o 可執行檔名
-l是要指定要用的靜態庫
-l告訴gcc編譯器從-l指定的路徑去找靜態庫,預設從 /usr/lib 或 /usr/local/lib 路徑下去找。
例子:
(一)、動態庫的製作
格式: lib***.so
庫名為***,字尾是 .so
gcc -shared -fpic jia.c -o libcalc.so
-shared——指定生產動態庫-fpic——作用於編譯階段,在生成目標檔案時就得使用該選項,以生成位置無關的**。
(二)、動態庫的使用(注意需要有標頭檔案)
(a)編譯:gcc jiamian.c -lcalc -l ./ -o aaa(與靜態庫的使用一樣)
(b)執行:通常需要建乙個shell指令碼,在指令碼中輸入下面內容:
注意:不能像靜態庫那樣直接 ./aaa ,這樣的話會報錯。export ld_library_path=
"/home/pi/zcb"
//在 ld_library_path 所指定的路徑下去找庫檔案(一般是自己建的動態庫所在路徑)
./aaa //生成的可執行檔案
例子:
圖中語句 chmod +x start.sh 目的是給該指令碼加可執行許可權。
Linux中靜態庫與動態庫
在windows和linux下都存在著大量的庫,庫是什麼呢?本質上來說,庫時一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。我們通常將一些公用函式寫成函式庫,所以庫是別人寫好的,現有的,成熟的,可以服用的 你可以使用但要必須得遵守許可協議。在我們現實開發過程中,不可能每乙份 都從頭編寫,當...
Linux靜態庫與動態庫
靜態庫 a 靜態庫的 在編譯過程中已經被載入可執行程式,因此體積較大。編譯程式時候需要庫作依賴,執行時候不需要。方便,不再需要外部函式庫支援 缺點 1 因為靜態庫被鏈結後直接嵌入可執行程式中,相當於每乙個可執行程式裡都有乙個庫的副本,浪費空間 2 一旦庫中有bug,需要重新編譯。建立步驟 1 編寫函...
linux動態庫與靜態庫
現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始。盡量不重複做別人已經做過的事,站在巨人的肩膀上 做事情。根據鏈結時期的不同,庫又有 靜態庫和共享庫 動態庫 二者的不同點在於 被載入的時刻不同,靜態庫的 在編譯過程中已經被載入可執行程式,因此體積較大。共享庫的 是在可執行程式執行時...