操作環境,linux系統下。
/* sth.c 庫程式 */
unsigned long long sth(unsigned int x, unsigned int y)
建立主函式呼叫fuction.c
/* test.c */
#include#includeint main(int argc, char *argv)
gcc -c sth.c
生成sth.o
檔案
ar rcsv libfoo.a sth.o
生成libsth.a
靜態庫檔案
編譯主程式
gcc -o test test.c -l . -lsth
生成test
可執行檔案
./test 5 6
輸出
answer is 41
gcc
庫選項的含義
選項含義
-static
進行靜態編譯,即鏈結靜態庫,禁止使用動態庫
-shared
1.可以生成動態庫檔案。2.進行動態編譯,盡可能地鏈結動態庫,只有當沒有動態庫時才會鏈結同名的靜態庫(預設選項可以省略)
-l dir
在庫檔案的搜尋路徑列表中新增dir
目錄
-lname
鏈結稱為libname.a
(靜態庫)或者libname.so
(動態庫)的庫檔案。若兩個都存在,則根據編譯方式(-static
和-shared
)來進行鏈結。
-fpic(或 -fpic)
生成使用性對位址的位置無關的目標**(position independent code
)。然後通常可以使用gcc
的-static
選項從該pic
目標檔案生成動態檔案。
首先使用 gcc 的-fpic 選項為動態庫構造乙個目標檔案
gcc -fpic -wall -c sth.c
接下來,使用-shared
選項和已建立的位置無關目標**,生成乙個動態庫libsth.so
。
gcc -shared -o libsth.so sth.o
下面編譯主程式,它將會鏈結到剛生成的動態庫libsth.so
。
gcc -o test test.c -l . -lsth
sudo cp libsth.so /lib
./test 5 6
answer is 41
參考:《嵌入式 linux 應用程式開發標準教程》
共享庫和靜態庫
1.什麼是庫 在windows平台和linux平台下都大量存在著庫。本質上來說庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。由於windows和linux的本質不同,因此二者庫的二進位制是不相容的。本文僅限於介紹linux下的庫。2.庫的種類 linux下的庫有兩種 靜態庫和共享庫 ...
共享庫和靜態庫的製作
庫是一組預先編譯好的函式的集合,這些函式都是按照可重用的原則編寫的。它們通常由一組相互關聯的函式組成來執行某項常見的任務,標準庫的位置一般存放在 lib和 user lib目錄中。庫的命名規則名字總是以lib開頭以.a或者.so結尾,其中以.a結尾的代表傳統的靜態函式庫,而以.so結尾的代表共享函式...
linux下的共享庫(動態庫)和靜態庫
linux下的共享庫 動態庫 和靜態庫 1.什麼是庫 在windows平台和linux平台下都大量存在著庫。本質上來說庫是一種可執行 的二進位制形式,可以被作業系統載入記憶體執行。由於windows和linux的本質不同,因此二者庫的二進位制是不相容的。本文僅限於介紹linux下的庫。2.庫的種類 ...