linux下製作靜態庫和動態庫的方法

2021-04-27 05:51:15 字數 1599 閱讀 2125

我們都知道 *.a 代表靜態庫;*.so 代表動態庫。那麼這兩個庫到底怎麼製作呢? 

製作靜態庫的方法:

把**編譯為目標檔案形式:

# gcc -c liberr.c -o liberr.o

使用工具ar建立乙個存檔檔案:

# ar rcs liberr.a liberr.o

編譯程式時把程式和liberr.a

# gcc errtest.c -o errtest -static -l./ -lerr

製作動態庫的方法:

首先編譯目標檔案:

# gcc -fpic -g -c liberr.c -o liberr.o

#gcc -g -shared -wl,-soname,liberr.so -o liberr.so.1.0.0 liberr.o -lc

把生成的動態庫liberr.so.1.0.0拷貝到/usr/lib目錄裡:

#cp liberr.so.1.0.0 /usr/lib

進入/usr/lib

#cd /usr/lib

#ln -s liberr.so.1.0.0 liberr.so.1

#ln -s liberr.so.1.0.0 liberr.so

#gcc errtest.c -o errtest -lerr

附加的常識:

編譯時,標準的標頭檔案在 /usr/include 下,系統編譯時預設自動到這搜尋。

若要自定義的標頭檔案,使用者可通過在命令中加 –i 《庫路徑》 到額外指定的標頭檔案搜尋自己要包含的標頭檔案。

而系統預設的鏈結庫搜尋路徑在 /usr/lib , /lib 下,若要鏈結自己制定的庫要在命令中加上 -l《庫名》  -l 《庫的路徑》

其中:–l 指定要鏈結的具體庫名

-l 到額外庫搜尋的路徑

例:g++ hello.cpp –o hello –i /usr/lib/qt-3.1/include –lqt –l /usr/lib/qt-3.1/lib

解釋:-lqt 代表鏈結 qt 庫,其中qt 庫在/usr/lib/qt-3.1/lib下的名是libqt.so

–l /usr/lib/qt-3.1/lib 代表路徑在/usr/lib/qt-3.1/lib 下

Linux下製作靜態庫和動態庫

所謂庫檔案,就是一堆函式的集合。一堆函式原始碼的集合 c 一堆二進位制函式 的集合 so 使用者可以呼叫庫裡面的函式,但是沒有辦法看到函式的實現過程。在linux裡面,庫有兩種,一種是靜態庫 lib x.a 另外一種是動態庫 共享庫 lib x.so 例子 libabc.so.0.8 lib 庫的字...

Linux下製作動態庫與靜態庫

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

Linux靜態庫和動態庫的製作

1.什麼是庫檔案?儲存函式和變數 特點 儲存的函式與變數只能使用但不能看到其實現 2.linux庫檔案 靜態庫 在編譯階段載入 將庫檔案的 載入到原始檔 動態庫 在執行時載入 3.生成可執行檔案存在的區別 優缺點 1 使用靜態庫生成的可執行檔案大於動態庫生成的可執行檔案 程式占用的記憶體較多 2 使...