日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

aix 的c库为什么都是静态库_Linux静态库生成指南

發布時間:2025/3/15 linux 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 aix 的c库为什么都是静态库_Linux静态库生成指南 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Linux上的靜態庫,其實是目標文件的歸檔文件。
在Linux上創建靜態庫的步驟如下:

  • 寫源文件,通過 gcc -c xxx.c 生成目標文件。
  • 用 ar 歸檔目標文件,生成靜態庫。
  • 配合靜態庫,寫一個使用靜態庫中函數的頭文件。
  • 使用靜態庫時,在源碼中包含對應的頭文件,鏈接時記得鏈接自己的庫。
  • 下面通過實例具體講解。

    寫源文件,生成目標文件。

    第一個源文件 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,為這兩個源文件生成目標文件:

    gcc -c my_print.c my_math.c

    我們就得到了 my_print.o 和 my_math.o。

    歸檔目標文件,得到靜態庫。

    我們使用 ar 將目標文件歸檔:

    ar crv libmylib.a my_print.o my_math.o

    我們就得到了libmylib.a,這就是我們需要的靜態庫。

    上述命令中 crv 是 ar的命令選項:

    • c 如果需要生成新的庫文件,不要警告
    • r 代替庫中現有的文件或者插入新的文件
    • v 輸出詳細信息

    通過 ar t libmylib.a 可以查看 libmylib.a 中包含的目標文件。

    可以通過 ar --help 查看更多幫助。

    注意:我們要生成的庫的文件名必須形如 libxxx.a ,這樣我們在鏈接這個庫時,就可以用 -lxxx。
    反過來講,當我們告訴編譯器 -lxxx時,編譯器就會在指定的目錄中搜索 libxxx.a 或是 libxxx.so。

    生成對應的頭文件

    頭文件定義了 libmylib.a 的接口,也就是告訴用戶怎么使用 libmylib.a。

    新建my_lib.h, 寫入內容如下:

    #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

    測試我們的靜態庫

    在同樣的目錄下,建立 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; }

    這個源文件中引用了 libmylib.a 中的 cout 和 add 函數。

    編譯test.c:

    gcc test.c -L. -lmylib

    將會生成a.out,通過 ./a.out 可以運行該程序。說明我們的靜態庫能正常工作。

    上面的命令中 -L. 告訴 gcc 搜索鏈接庫時包含當前路徑, -lmylib 告訴 gcc 生成可執行程序時要鏈接 libmylib.a。

    通過makefile自動化

    上面的步驟很繁瑣,還是寫個簡單的makefile吧,內容如下:

    .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. -lmylib

    makefile寫好后,運行 make build 將會構建 libmylib.a, 運行 make test 將會生成鏈接 libmylib.a 的程序。

    如果你在 windows 上使用 mingw,和Linux下生成靜態庫的方法是一樣的。

    嵌入式物聯網資料分享交流群:707159742 入群有全套學習視頻資料電子書免費贈送!

    參考資料:

    靜態庫的制作_Linux庫的實現與應用_嵌入式開發工程師?www.makeru.com.cn動態庫的制作_Linux庫的實現與應用_嵌入式開發工程師?www.makeru.com.cn 創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎

    總結

    以上是生活随笔為你收集整理的aix 的c库为什么都是静态库_Linux静态库生成指南的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。