建立C共享庫和靜態庫

2021-08-28 16:41:54 字數 1578 閱讀 7863

操作環境,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.庫的種類 ...