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

歡迎訪問 生活随笔!

生活随笔

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

linux

关于linux下制作静态库

發布時間:2025/3/8 linux 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 关于linux下制作静态库 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

本小測試程序是從<<linux程序設計第4版>>摘錄;

直接入正正題:

我們要創建一個表態庫,libfoo.a

所用文件: fred.c bill.c

其中fred.c代碼如下:

  • #include?<stdio.h> ?
  • ?
  • void?fred(int?arg) ?
  • { ?
  • ????printf("fred:?we?passed?%d\n",?arg); ?
  • } ?
  • 其中bill.c 代碼如下:

    ?

  • #include?<stdio.h> ?
  • ?
  • void?bill(char?*arg) ?
  • { ?
  • ????printf("bill:?we?passed?%s\n",?arg); ?
  • } ?
  • 這樣我們做好了兩個源文件。

    我們還要做一個頭文件lib.h,代碼其實就是包涵這兩個函數就行了。

    ?

  • void?bill(char?*); ?
  • void?fred(int);?
  • 然后我們進行編譯:把源文件編譯成目標文件。

    gcc -c bill.c fred.c

    這樣會生成兩個.o文件,fred.o bill.o

    然后我們就可以寫測試程序了。我們寫一個program.c.

    ?

  • #include?<stdlib.h> ?
  • #include?"lib.h" ?
  • ?
  • int?main(int?argc,?char?*argv[]) ?
  • { ?
  • ????bill("hello?world"); ?
  • ????exit(0); ?
  • } ?
  • 然后我們就可以編譯了

    gcc -c program.c

    同樣也是編譯出目標文件。

    然后我們可以編譯出可執行文件。

    gcc -o program program.o bill.o

    這種方法我們一般都知道。

    下面我們把bill.o 和 fred.o編譯到靜態庫里。用ar命令。具體怎么用可以去查下。

    ar crv libfoo.a bill.o fred.o

    ar創建歸檔文件;AR = AR=/usr/local/ndk/toolchain/arm-eabi/bin/arm-eabi-ar
    crv為參數。

    libfoo.a為目標庫,后面是生成庫所用文件夾;

    然后就可以看到libfoo.a,這個時候我們要用ranlib來對靜態庫的符號索引表進行更新;

    ranlib libfoo.a

    然后可以用這個庫了

    gcc -o program program.o libfoo.a

    也可以用

    gcc -o program program.o -L. lfoo

    -L指定路徑,要全路徑,.是當前路徑。

    轉載于:https://blog.51cto.com/yxc6123/946015

    總結

    以上是生活随笔為你收集整理的关于linux下制作静态库的全部內容,希望文章能夠幫你解決所遇到的問題。

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