靜態庫編譯詳解

1.首先介紹下依賴關系:

sub.c 依賴于 common.c

add.c  依賴于 common.c

main.c 以來與 sub.c  add.c

2.編譯一個math.a main.c依賴于math.a

說明: 可以使用-lmath 或者 libmath.a 都是可以的.

第一種方式:

yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ gcc -c *.c -I ./include/
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ ar -rcs libmath.a *.o
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ gcc main.c -o main.out -L ./  -lmath  -I ./include/
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ ./main.out 
Hello, World!
執行common-------->function
執行add-------->function
執行common-------->function
執行sub-------->function

第二種方式:

yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ gcc -c *.c -I ./include/
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ ar -rcs libmath.a *.o
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ gcc main.c -o main.out -L ./  libmath.a  -I ./include/
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ ./main.out 
Hello, World!
執行common-------->function
執行add-------->function
執行common-------->function
執行sub-------->function

3.各自編譯add sub common,add 和sub 依賴于 common

yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ gcc -c *.c -I ./include/
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ ar -rcs libadd.a add.o
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ ar -rcs libsub.a sub.o
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ ar -rcs libcommon.a common.o
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ gcc main.c -o main.out  -static -L ./  -ladd -lsub -lcommon -I ./include/
yueqingchan@yueqingChan:~/Desktop/TestGcc-Files/TestStatic1$ ./main.out 
Hello, World!
執行common-------->function
執行add-------->function
執行common-------->function
執行sub-------->function

說明: 靜態庫就算存在以來關系也是可以直接編譯的. 但是最后的時候需要-l (小寫的L)所有的靜態庫.

4.add.a sub.a common.a 生成一個動態庫(待驗證)

$ gcc -shared -fPIC -Wl,--whole-archive libA.a libB.a libC.a -Wl,--no-whole-archive -Wl,-soname -o libcombined.so
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容