1. 程式人生 > >通過gcc建立靜態庫.a、動態庫.so及其使用

通過gcc建立靜態庫.a、動態庫.so及其使用

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