Linux中的動態庫與靜態庫

2021-10-22 20:30:21 字數 1803 閱讀 4088

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

說明:

主函式c檔案 -l庫名 -l 路徑 -o 可執行檔名

-l是要指定要用的靜態庫

-l告訴gcc編譯器從-l指定的路徑去找靜態庫,預設從 /usr/lib 或 /usr/local/lib 路徑下去找。

(b)執行:做完步驟(a)就可以執行可執行檔案了

例子:

(一)、動態庫的製作

格式: lib***.so

庫名為***,字尾是 .so

gcc -shared -fpic jia.c -o libcalc.so

-shared——指定生產動態庫

-fpic——作用於編譯階段,在生成目標檔案時就得使用該選項,以生成位置無關的**。

(二)、動態庫的使用(注意需要有標頭檔案)

(a)編譯:gcc jiamian.c -lcalc -l ./ -o aaa(與靜態庫的使用一樣)

(b)執行:通常需要建乙個shell指令碼,在指令碼中輸入下面內容:

export ld_library_path=

"/home/pi/zcb"

//在 ld_library_path 所指定的路徑下去找庫檔案(一般是自己建的動態庫所在路徑)

./aaa //生成的可執行檔案

注意:不能像靜態庫那樣直接 ./aaa ,這樣的話會報錯。

例子:

圖中語句 chmod +x start.sh 目的是給該指令碼加可執行許可權。

Linux中靜態庫與動態庫

在windows和linux下都存在著大量的庫,庫是什麼呢?本質上來說,庫時一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。我們通常將一些公用函式寫成函式庫,所以庫是別人寫好的,現有的,成熟的,可以服用的 你可以使用但要必須得遵守許可協議。在我們現實開發過程中,不可能每乙份 都從頭編寫,當...

Linux靜態庫與動態庫

靜態庫 a 靜態庫的 在編譯過程中已經被載入可執行程式,因此體積較大。編譯程式時候需要庫作依賴,執行時候不需要。方便,不再需要外部函式庫支援 缺點 1 因為靜態庫被鏈結後直接嵌入可執行程式中,相當於每乙個可執行程式裡都有乙個庫的副本,浪費空間 2 一旦庫中有bug,需要重新編譯。建立步驟 1 編寫函...

linux動態庫與靜態庫

現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的 都從零開始。盡量不重複做別人已經做過的事,站在巨人的肩膀上 做事情。根據鏈結時期的不同,庫又有 靜態庫和共享庫 動態庫 二者的不同點在於 被載入的時刻不同,靜態庫的 在編譯過程中已經被載入可執行程式,因此體積較大。共享庫的 是在可執行程式執行時...