創建C共享庫和靜態庫

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 應用程序開發標準教程》
作者:華清遠見

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章