1 創建C共享庫和靜態庫
操作環境,Linux系統下。
code
/* sth.c 庫程序 */
unsigned long long sth(unsigned int x, unsigned int y)
{
return (x+y+x*y);
}
創建主函數調用fuction.c
/* test.c */
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[])
{
unsigned int x, y;
sscanf(argv[1], "%u", &x);
sscanf(argv[2], "%u", &y);
long long res = sth(x, y);
printf("answer is %u\n", res);
return 0;
}
創建靜態庫
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 應用程序開發標準教程》
作者:華清遠見