建立動態庫 迅為乾貨 靜態庫和動態庫的製作和使用

2021-10-14 19:02:34 字數 1892 閱讀 1976

因為我們在寫**的時候,不可能每個**都要重新開始寫,我們可以使用別人寫好的,成熟的**,所以,庫的存在就變得非常有意義。linux的下的庫主要有倆種,乙個是動態庫,乙個是靜態庫。

1簡介將乙個程式編譯成可執行程式要經過預編譯,編譯,彙編,和鏈結這個幾個步驟,而動態庫和靜態庫的主要區別就是在鏈結階段怎麼處理這些庫。

靜態庫在程式編譯的時候會被鏈結到目標檔案當中,在程式執行的時候不在需要這些庫,程式移植方便,但是更新會很麻煩,可執行檔案比較大,浪費空間,而動態庫在編譯的時候並不會鏈結到目標檔案中去,所以程式在執行的時候還需要這些動態庫的存在。可執行程式比較小,但是程式在執行的過程中必須提供相應的庫。

2實驗操作

實驗一:靜態庫的製作和使用

實驗目標:製作乙個靜態庫並使用。

實驗內容:

靜態庫的製作主要有以下幾個步驟:

1,生成目標檔案。

2,使用ar命令建立靜態函式庫。

命名規則:

必須是lib[庫的名字].a,括號裡面的為你的庫的名字,擴充套件名為.a

使用方法:

在使用gcc編譯的時候加上引數-l 和你的庫的路徑和你要鏈結的庫。

我們建立乙個文字並輸入以下**。

將這個檔案放進ubuntu中。生成目標檔案,輸入以下命令:

輸入以下命令建立靜態庫, -c是建立的意思,-是替換的意思。

在當前目錄建立乙個檔案輸入以下**:

實驗二:動態庫的製作和使用

實驗目標:製作乙個動態庫並使用。

實驗內容:

動態庫的製作主要有以下幾個步驟:

1,生成目標檔案。

2,生成動態庫。

命名規則:

lib[庫的名字].so,括號裡面的為你的庫的名字,擴充套件名為.so

使用方法:

將生成的庫放在/usr/lib 或者 /lib下面去。

在實驗一的lib.c基礎上,輸入下圖命令,-fpic表示與原始碼位置無關,-shared 生成動態庫

編譯test.c。輸入以下命令

執行可執行檔案test發現不可以執行成功,提示如下:

因為linux會預設在/usr/lib 或者 /lib下面找,但是我們的庫並不在這倆個路徑下面,我們將我們生成的庫拷貝到/usr/lib下面去,然後我們在執行我們程式。

執行程式:

3實驗分析

通過實驗我們可以發現,使用動態庫編譯生成的可執行檔案要比靜態庫的要小。

使用動態庫:

使用靜態庫:

另外我們在編譯的時候引數-l 是用來指定庫的搜尋路徑,-l是用來指定要鏈結的庫的名字.

這個庫的名稱是什麼,就是我們起的庫的名字,如下:

建立靜態庫和動態庫

今天是2014年5月25日。首先我想說一下在linux作業系統中,如何檢視程序和檢視程序樹。要想檢視程序只需敲入ps aux 即可,也可用 top指令,至於它倆的具體區別後面在介紹。用pstree 來檢視程序樹。這裡面有子程序和父程序,一定要會看。下來教你如何匯出核心資訊,和檢視映像。基於剛才的ps...

linux建立靜態庫和動態庫

2015新年第一篇部落格,哈哈,這個2月還沒寫過部落格呢,從現在開始繼續!一 建立靜態庫 在本例中將建立乙個小型靜態函式庫libfoo,包含兩個函式bill fred 1 編輯兩個檔案bill.c和fred.c bill.c include void bill fred.c include void...

靜態庫和動態庫的建立

最近學習了一下靜態庫和動態庫的建立,這裡是我學習後知道的建立方法,在這裡和大家分享以下,如果有不同意見或者更好的建議希望大家批評指正 首先我們先來說以下靜態庫和動態庫 1.靜態庫 首先靜態庫的名字是以.s為字尾來命名的,靜態庫的作用是在函式的呼叫過程中將庫中的所有東西拷貝到目標 所在的檔案中,所以它...