先說明一點,靜態庫文件是由多個目標文件打包而成的,在windows下靜態庫文件的後綴是.lib,而在linux下靜態庫文件的後綴是.a(a是archive的縮寫,也就是文檔文件)。linux
廢話少說,下面直接進入主題。windows
1.建立兩個c文件:addition.c 和 multiplication.c函數
addition.cspa
1 //addition.c 2 int addition (int a ,int b) 3 { 4 int result; 5 result=a+b; 6 return result; 7 }
multiplication.ccode
1 //multiplication.c 2 int multiplication 3 { 4 int result; 5 result=a*b; 6 return result; 7 }
2.編譯C文件獲得.o目標文件blog
1 $ gcc -c addition.c 2 $ gcc -c multiplication.c
其中選項 -c 是讓gcc只把源碼編譯成.o文件。ip
接着在當前文件夾中就會發現多處了兩個.o文件文檔
1 $ ls 2 addition.c multiplication.c addition.o multiplication.o
3. 用ar命令來建立靜態庫文件get
1 $ ar cr libarith.a addition.o multiplication.o
其中cr就是create的意思,這樣就建立了一個libarith.a的靜態庫文件。編譯器
4.寫一個c程序來調用libarith.a庫
在使用庫文件以前要先創建一個頭文件 header.h,它包含了庫文件中實現了函數的聲明。
1 //header.h 2 #include<stdio.h> 3 int addition(int a,int b); 4 int multiplication(int a,int b);
而後建立一個c程序example.c來調用函數
1 // example.c 2 #include "header.h" 3 int main() 4 { 5 int result; 6 result=addition(1,2); 7 printf("addition result is :%d\n",result); 8 result=multiplition(3,4); 9 printf("multiplication result is:%d\n",result); 10 return 0; 11 }
編譯example.c
1 $ gcc example.c libarith.a -o example
選項 -o 後面的參數是指定編譯器生成的可執行文件名,若是沒有加 -o的話默認生成的可執行文件名是 a.out
運行能夠行文件example
1 $./example 2 addtion result is:3 3 multiplication result is:12
5.查看庫文件中的目標文件
1 $ ar t libarith.a 2 addition.o 3 multiplition.o
若是想查看庫文件中包含了哪些函數能夠用 nm libarith.a 查看,若是要查看可執行文件須要調用哪些庫能夠用 lld example 來查看。
6.從庫文件中提取目標文件
1 $ mkdir file 2 $ cp libarith.a file/ 3 $ cd file 4 $ ar x libarith.a 5 $ ls 6 addition.o 7 multiplition.o
7.添加一個目標文件到庫文件中
假設你已經有一個目標文件subtraction.o
1 $ ar r libarith.a subtraction.o 2 $ ar t libarith.a 3 addition.o 4 multiplication.o 5 subtraction.o
若是庫文件中已經存在了subtraction.o文件,則會用新的來覆蓋原來舊的。
8.刪除庫文件中指定的目標文件
1 $ ar d libarith.a addition.o 2 $ ar t libarith.a 3 multiplication.o 4 subtraction.o
參考來源:http://www.thegeekstuff.com/2010/08/ar-command-examples/