因為我們在寫**的時候,不可能每個**都要重新開始寫,我們可以使用別人寫好的,成熟的**,所以,庫的存在就變得非常有意義。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為字尾來命名的,靜態庫的作用是在函式的呼叫過程中將庫中的所有東西拷貝到目標 所在的檔案中,所以它...