一、重要概念。
1.1 庫檔案。庫檔案實際上是使用共享程式**的一種方式。庫檔案分為靜態庫和動態庫。linux下靜態庫檔案的字尾為.a 動態庫的字尾為.so。 windows下的靜態庫檔案的字尾為.lib。動態庫檔案的字尾為.dll。
1.2 靜態庫。程式編譯一般需經預處理、編譯、彙編和鏈結幾個步驟。在我們的應用中,有一些公共**是需要反覆使用,就把這些**編譯為「庫」檔案;在鏈結步驟中,連線 器將從庫檔案取得所需的**,複製到生成的可執行檔案中。這種庫稱為靜態庫,其特點是可執行檔案中包含了庫**的乙份完整拷貝;缺點就是被多次使用就會有 多份冗餘拷貝。
1.3動態庫。動態庫在鏈結階段沒有被複製到程式中,而是程式在執行時由系統動態載入到記憶體中供程式呼叫。使用動態庫的優點是系統只需載入一次動態庫,不同的程式可以得到記憶體中相同的動態庫的複本,因此節省了很多記憶體。
二、如何使用ar命令建立靜態庫檔案。
2.1 ar 對應的英文是 archive
['ɑ:kaiv]
歸檔的意思。
.a,是靜態庫,是乙個或多個.o檔案"打包"(ar)在一起,用於靜態鏈結
。(乙個.o檔案可以有多個函式)
2.2 ar的使用方法。
2.2.1建立乙個靜態庫檔案。
ar -rv libhello.a hello1.o hello2.o hello3.o
ar -qv libhello.a hello1.o hello2.o hello3.o
如果libhello.a不存在則建立該庫檔案。如果存在則在不檢查相同成員的情況下
將新的成員新增到末尾。
2.2.2 檢視庫檔案中的所有模組。
ar -t libhello.a
依次列出庫檔案中所有模組成員,顯示次序是根據新增模組次序。
2.2.3 刪除庫檔案中的模組。
ar -dv libhello.a hello3.o
將模組hello3.o在庫檔案中刪除。
2.2.4 將庫檔案中指定的模組取出來。
ar -xv libhello.a hello1.o
將庫模組hello1.o釋放到當前資料夾下,不會刪除庫檔案中的該模組。
2.2.5 在指定的模組後面插入新的成員。
ar -ra hello2.o libhello.a hello3.o
將模組hello2.o插入到庫檔案libhello.a中的hello3.o後面。
2.2.6 更新庫中的模組。
ar -ru libhello.a hello3.o
如果libhello.a庫中沒有hello3.o將其新增到庫末尾。
如果有的話將替換之。
三、如何使用庫檔案。
3.1 靜態庫檔案的命名。
3.2 在編譯的時候將相應的庫檔案鏈結上即可。
例如gcc main.c -l. -lhello.a
注意:在鏈結庫檔案時,庫檔案的名字要除掉lib。
在使用庫檔案時,最直接的方式就是直接將其加到編譯檔案裡面去。
例如:gcc -g -
o readad readad.c
../lib/libxysqlite.a
四,對庫檔案的理解。
現在我覺得庫檔案的設計是開發模組化的乙個體現。在開發的過程中,
每個人負責乙個模組,每個模組都有很多個函式,將這些函式都打包成庫函式。
到時候別人就呼叫你的庫函式即可。
簡單點的靜態庫的製作很容易。就是將起編譯成.o檔案後,對.o檔案直接
打包成庫函式。
例如:ar crs libxysqlite.a libxysqlite.o
在libxysqlite.c中寫個用來測試的main函式,編譯的時候將其注釋掉。
如果覺得自己寫的函式沒什麼問題可以不用測試。
c create the archive.
r insert the files member... into archive (with replacement)
s write an object-file index into the archive
更多的引數理解可以去
man ar
Linux下靜 動態庫檔案的建立
靜態庫檔案 動態庫檔案檔案型別區分 a so 作用 在c檔案預編譯時,引導程式 在程式執行時,隨程式需求進行呼叫 1 建立 c 原始碼檔案,並利用gcc編譯器 vim終端 對 c 檔案編譯 gcc c o 生成 o 檔案 可執行二進位制檔案 2 利用 o 檔案製作靜態庫檔案 ar crs lib a...
Linux下如何建立loop device
因為這種裝置的存在,就為我們提供了一種建立乙個存在於其他檔案中的虛擬檔案系統的機制.如果我們在使用一種集群需要使用其他碟符而沒有新裝置的時候可以採取這種方式,在虛擬機器下需要裝置的時候也可以採取這種方式 第一步 用dd命令建立乙個檔案,檔案大小即為你的新裝置的大小 dd if dev zero of...
Linux下建立動態庫
在linux下動態庫檔案字尾為.so,其中so代表 shared object,即共享目標檔案。動態庫的特點就是在系統記憶體中,只會存在動態庫的乙個副本。例如 程式a,b允許時都需要動態庫lib.so的支援。當a程式執行時,由於系統記憶體中沒有發現lib.so庫,所以需要載入lib.so。此時b程式...