通過gcc建立靜態庫.a、動態庫.so及其使用
阿新 • • 發佈:2018-12-21
gcc的常用選項
-v
:檢視gcc版本
-c
:只編譯,生成.o檔案,不進行連結
-g
:包含除錯資訊,方便使用gdb除錯
-D
:編譯時定義巨集
靜態庫的建立和使用
這裡使用命令
ar
,常用的選項是:
-r
:替換歸檔中已有的檔案或加入新檔案
-t
:顯示歸檔檔案的內容
-x
:從歸檔檔案中解壓檔案,利用選項-o可以指定解壓的檔案,如ar -x libfunc.a -o add.o
檔案準備:
// file1:add.c
int add(int a, int b) {
return a + b;
}
// file2:sub.c
int sub (int a, int b) {
return a - b;
}
// file3:main.c
#include <stdio.h>
int add(int a, int b);
int sub(int a, int b);
int main() {
printf("3 + 1 = %d\n", add(3, 1));
printf("3 - 1 = %d\n", sub(3, 1));
return 0;
}
1)利用gcc建立.o檔案
2)使用ar命令對.o檔案進行打包生成.a檔案和檢視
3)使用靜態庫.a檔案
動態庫的建立和使用
檔案準備,需要建立這樣的目錄樹:
// file1:add.c
int add(int a, int b) {
return a + b;
}
// file2:sub.c
int sub(int a, int b) {
return a - b;
}
// file3:main.c
#include <stdio.h>
#include "common.h"
int add(int a, int b);
int sub(int a, int b);
int main() {
printf("3 + 1 = %d\n", add(3 , 1));
printf("3 - 1 = %d\n", sub(3, 1));
return 0;
}
// file4:common.h
int add(int a, int b);
int sub(int a, int b);
1)利用gcc建立.so檔案到指定目錄lib
這裡使用到了兩個選項,分別是
-fpic
和-shared
2)使用動態庫
可以使用ldd
命令檢視該可執行檔案含有什麼動態庫
執行該可執行檔案
reference to :link