linux庫及靜態庫及動態庫的建立

2021-08-13 08:31:22 字數 2452 閱讀 8763

庫:庫是一組預先編譯好的函式的集合,這些函式都是按照可重用的原則編寫的。它們通常由一組相互關聯的函式組成以執行某項常見任務,比如螢幕處理函式庫和資料庫訪問例程。庫分為靜態和動態庫兩種,這裡先介紹一下靜態庫的建立。

linux的庫一般在/lib或/usr/lib目錄下。lib是庫(library)的英文縮寫,它主要存放系統的鏈結庫檔案,沒有該目錄則系統就無法正常執行。/lib目錄中儲存著程式執行時使用的共享庫。通過共享庫,許多程式可以重複使用相同的**,並且這些庫可以儲存在乙個公共的位置上,因此能減小執行程式的大小。這個目錄包含程式在鏈結時使用的各種庫。

.a代表傳統的靜態函式庫這類庫的名字一般是lib***.a;利用靜態函式庫編譯成的檔案比較大,因為整個函式庫的所有資料都被整合進目標**中,他的優點就顯而易見了,即編譯後的執行程式不需要外部的函式庫支援,因為所有使用的函式都已經被編譯進可執行檔案了。當然這也會稱為它的缺點,因為如果靜態函式庫改變了,那麼你的程式必須重新編譯,而且體積也較大。

靜態庫的建立簡單的分為三步:

①將所有的原始檔先編譯成.o檔案

②ar crv libxx.a ***.o ***.o

③使用庫:gcc -o main main.c -l庫的路徑 -l庫的名字

先把原始檔編譯成.o檔案

建立庫檔案

-l後面的.為當前位址,生成可執行檔案main

切換管理員模式

將建立的庫檔案放入/lib中

確認放入

庫檔案預設/bin下,因此在生成main時,只需給出庫檔名

.so代表共享函式庫

這類庫的名字一般是lib***.so,動態庫又稱共享庫;相對於靜態函式庫,動態函式庫在編譯的時候並沒有被編譯進目標**中,你的程式執行到相關函式時才呼叫函式庫里的相應函式,因此動態函式庫所產生的可執行檔案比較小。由於函式庫沒有被整合進你的程式,而是程式執行時動態申請並呼叫,所以程式的執行環境中必須提供相應的庫。動態函式庫的改變並不影響你的程式,所以動態函式庫的公升級比較方便。而且如果多個應用程式都要使用同一函式庫,動態庫就非常適合,可以減少應用程式的體積。

動態庫建立的簡單步驟:

①編寫原始檔。

②將乙個或幾個原始檔編譯鏈結,生成共享庫。

③通過 -l -l*** 的gcc選項鏈結生成的lib***.so。

④把lib***.so放入鏈結庫的標準路徑,才能執行鏈結了lib***.so的程式。

先生成乙個lib***.so檔案

若直接執行的話,或不能鏈結到lib***.so檔案

通過管理員身份,把lib***.so放入到預設目錄/usr/lib/目錄下,即可鏈結。

簡答:

1.標頭檔案在**?

標頭檔案用來提供對常量的定義和對系統函式庫函式呼叫的宣告,標頭檔案幾乎總是位於/usr/include目錄及其子目錄中。(存放標頭檔案的標準路徑)

2.庫檔案在**?

庫是一組預先編譯好的函式的集合,標準系統庫檔案一般儲存在/lib和/usr/lib目錄中。

3.可執行檔案在**/命令在**?

可執行檔案和命令存放在/bin /usr/bin目錄下。

4.什麼是庫?共享庫/靜態庫的區別?

庫是一組預先編譯好的函式(方法)的集合。

靜態庫,也稱作歸檔檔案,它們的檔名都以.a結尾。

共享庫,.so結尾

區別:

**靜態庫使用時,用到的方法都包含在了可執行程式中。

共享庫使用中,在生成的可執行程式中沒有包含用到的方法,在執行程式時動態載入。**

Linux 靜態庫及動態庫

庫的製作和使用 什麼是庫 1 庫是二進位制 2 庫是加了密的源 3 庫是功能相近或者相似的函式的集合 庫的作用 1 的復用性,提高了軟體開發的效率,而且穩定安全.庫的製作 庫分為靜態庫和動態庫 庫的名字 libtest1.a 材料 main.c fun1.c fun2.c head.h main.c...

Linux 動態庫及靜態庫的建立使用

加粗樣式 靜態庫檔案字尾為 a 動態庫檔案字尾為 so 本次以簡單的兩個函式的集合來描述這些庫的建立以及使用 建立這樣幾個目錄 function headfile lib media outfile sourcecode 作用從左至右分別是 函式主體存放,標頭檔案存放,庫檔案存放,中間檔案存放,輸出...

Linux靜態庫與動態庫製作及使用

一 二者區別 1 靜態庫是在程式執行前就加入到目標程式中去 動態庫程式執行的過程動態的由目標程式去呼叫 2 靜態庫對空間要求不高,對時間要求高 動態庫對時間要求不高,對空間要求高 二 庫製作 同一目錄下有三個檔案 主 hellomain.c 頭 hellomain.h功能 hellofunc.c 1...