aix 的c库为什么都是静态库_Linux静态库生成指南
Linux上的靜態(tài)庫,其實(shí)是目標(biāo)文件的歸檔文件。
在Linux上創(chuàng)建靜態(tài)庫的步驟如下:
下面通過實(shí)例具體講解。
寫源文件,生成目標(biāo)文件。
第一個(gè)源文件 my_print.c
#include <stdio.h>void cout(const char * message) {fprintf(stdout, "%sn", message); }源文件2: my_math.c
int add(int a, int b) {return a + b; }int subtract(int a, int b) {return a - b; }使用gcc,為這兩個(gè)源文件生成目標(biāo)文件:
gcc -c my_print.c my_math.c我們就得到了 my_print.o 和 my_math.o。
歸檔目標(biāo)文件,得到靜態(tài)庫。
我們使用 ar 將目標(biāo)文件歸檔:
ar crv libmylib.a my_print.o my_math.o我們就得到了libmylib.a,這就是我們需要的靜態(tài)庫。
上述命令中 crv 是 ar的命令選項(xiàng):
- c 如果需要生成新的庫文件,不要警告
- r 代替庫中現(xiàn)有的文件或者插入新的文件
- v 輸出詳細(xì)信息
通過 ar t libmylib.a 可以查看 libmylib.a 中包含的目標(biāo)文件。
可以通過 ar --help 查看更多幫助。
注意:我們要生成的庫的文件名必須形如 libxxx.a ,這樣我們?cè)阪溄舆@個(gè)庫時(shí),就可以用 -lxxx。
反過來講,當(dāng)我們告訴編譯器 -lxxx時(shí),編譯器就會(huì)在指定的目錄中搜索 libxxx.a 或是 libxxx.so。
生成對(duì)應(yīng)的頭文件
頭文件定義了 libmylib.a 的接口,也就是告訴用戶怎么使用 libmylib.a。
新建my_lib.h, 寫入內(nèi)容如下:
#ifndef __MY_LIB_H__ #define __MY_LIB_H__int add(int a, int b); int subtract(int a, int b);void cout(const char *); #endif測(cè)試我們的靜態(tài)庫
在同樣的目錄下,建立 test.c:
#include "my_lib.h"int main(int argc, char *argv[]) {int c = add(15, -21);cout("I am a func from mylib ...");return 0; }這個(gè)源文件中引用了 libmylib.a 中的 cout 和 add 函數(shù)。
編譯test.c:
gcc test.c -L. -lmylib將會(huì)生成a.out,通過 ./a.out 可以運(yùn)行該程序。說明我們的靜態(tài)庫能正常工作。
上面的命令中 -L. 告訴 gcc 搜索鏈接庫時(shí)包含當(dāng)前路徑, -lmylib 告訴 gcc 生成可執(zhí)行程序時(shí)要鏈接 libmylib.a。
通過makefile自動(dòng)化
上面的步驟很繁瑣,還是寫個(gè)簡(jiǎn)單的makefile吧,內(nèi)容如下:
.PHONY: build testbuild: libmylib.alibmylib.a: my_math.o my_print.oar crv $@ my_math.o my_print.omy_math.o: my_math.cgcc -c my_math.cmy_print.o: my_print.cgcc -c my_print.ctest: a.outa.out: test.cgcc test.c -L. -lmylibmakefile寫好后,運(yùn)行 make build 將會(huì)構(gòu)建 libmylib.a, 運(yùn)行 make test 將會(huì)生成鏈接 libmylib.a 的程序。
如果你在 windows 上使用 mingw,和Linux下生成靜態(tài)庫的方法是一樣的。
嵌入式物聯(lián)網(wǎng)資料分享交流群:707159742 入群有全套學(xué)習(xí)視頻資料電子書免費(fèi)贈(zèng)送!
參考資料:
靜態(tài)庫的制作_Linux庫的實(shí)現(xiàn)與應(yīng)用_嵌入式開發(fā)工程師?www.makeru.com.cn動(dòng)態(tài)庫的制作_Linux庫的實(shí)現(xiàn)與應(yīng)用_嵌入式開發(fā)工程師?www.makeru.com.cn 創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的aix 的c库为什么都是静态库_Linux静态库生成指南的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux qt程序打包依赖库,Linu
- 下一篇: kali linux改中文_【亲测实验】