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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ar - 创建静态库.a文件

發布時間:2025/3/15 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ar - 创建静态库.a文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

用途說明

創建靜態庫.a文件。用C/C++開發程序時經常用到,但我很少單獨在命令行中使用ar命令,一般寫在makefile中,有時也會在shell腳 本中用到。關于Linux下的庫文件、靜態庫、動態庫以及怎樣創建和使用等相關知識,參見本文后面的相關資料【3】《關于Linux靜態庫和動態庫的分析》。

?

常用參數

格式:ar rcs? libxxx.a xx1.o xx2.o

參數r:在庫中插入模塊(替換)。當插入的模塊名已經在庫中存在,則替換同名的模塊。如果若干模塊中有一個模塊在庫中不存在,ar顯示一個錯誤消息,并不替換其他同名模塊。默認的情況下,新的成員增加在庫的結尾處,可以使用其他任選項來改變增加的位置。【1】

參數c:創建一個庫。不管庫是否存在,都將創建。

參數s:創建目標文件索引,這在創建較大的庫時能加快時間。(補充:如果不需要創建索引,可改成大寫S參數;如果.a文件缺少索引,可以使用ranlib命令添加)

?

格式:ar t libxxx.a

顯示庫文件中有哪些目標文件,只顯示名稱。

?

格式:ar tv libxxx.a

顯示庫文件中有哪些目標文件,顯示文件名、時間、大小等詳細信息。

?

格式:nm -s libxxx.a

顯示庫文件中的索引表。

?

格式:ranlib libxxx.a

為庫文件創建索引表。

?

使用示例

示例一 在shell腳本中使用

?

Bash代碼 ?
  • OS=`uname?-r`??
  • ar?rcs?libhycu.a.$OS?*.o??
  • OS=`uname -r` ar rcs libhycu.a.$OS *.o?

    ?

    示例二 在makefile中使用

    Makefile代碼 ?
  • $(BIN1):?$(BIN1_OBJS)??
  • ????????ar?rcs?$@?$^??
  • $(BIN1): $(BIN1_OBJS)ar rcs $@ $^

    ?

    ?

    示例三 創建并使用靜態庫

    第一步:編輯源文件,test.h test.c main.c。其中main.c文件中包含main函數,作為程序入口;test.c中包含main函數中需要用到的函數。

    vi test.h test.c main.c

    第二步:將test.c編譯成目標文件。

    gcc -c test.c

    如果test.c無誤,就會得到test.o這個目標文件。

    第三步:由.o文件創建靜態庫。

    ar rcs libtest.a test.o

    第四步:在程序中使用靜態庫。

    gcc -o main main.c -L. -ltest

    因為是靜態編譯,生成的執行文件可以獨立于.a文件運行。

    第五步:執行。

    ./main

    ?

    示例四 創建并使用動態庫

    第一步:編輯源文件,test.h test.c main.c。其中main.c文件中包含main函數,作為程序入口;test.c中包含main函數中需要用到的函數。

    vi test.h test.c main.c

    第二步:將test.c編譯成目標文件。

    gcc -c test.c

    前面兩步與創建靜態庫一致。

    第三步:由.o文件創建動態庫文件。

    gcc -shared -fPIC -o libtest.so test.o

    第四步:在程序中使用動態庫。

    gcc -o main main.c -L. -ltest

    當靜態庫和動態庫同名時, gcc命令將優先使用動態庫。

    第五步:執行。

    LD_LIBRARY_PATH=. ./main

    ?

    示例五 查看靜態庫中的文件

    [root@node56 lib]# ar -t libhycu.a
    base64.c.o
    binbuf.c.o
    cache.c.o
    chunk.c.o
    codec_a.c.o
    ...
    xort.c.o
    [root@node56 lib]#
    [root@node56 lib]# ar -tv libhycu.a
    rw-r--r-- 0/0?? 7220 Jul 29 19:18 2011 base64.c.o
    rw-r--r-- 0/0?? 2752 Jul 29 19:18 2011 binbuf.c.o
    rw-r--r-- 0/0? 19768 Jul 29 19:18 2011 cache.c.o
    ...
    rw-r--r-- 0/0?? 4580 Jul 29 19:18 2011 xort.c.o
    [root@node56 lib]#

    [root@node56 lib]# nm -s libhycu.a | less

    Archive index:
    Base64Enc in base64.c.o
    GetBase64Value in base64.c.o
    Base64Dec in base64.c.o
    encode64 in base64.c.o
    decode64 in base64.c.o
    check64 in base64.c.o
    test64 in base64.c.o
    ...
    chunk_alloc in chunk.c.o
    [root@node56 lib]#

    總結

    以上是生活随笔為你收集整理的ar - 创建静态库.a文件的全部內容,希望文章能夠幫你解決所遇到的問題。

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