博客專欄

        EEPW首頁 > 博客 > linux命令之ar—創建靜態庫.a文件

        linux命令之ar—創建靜態庫.a文件

        發布人:電子禪石 時間:2021-11-18 來源:工程師 發布文章
        linux命令之ar—創建靜態庫.a文件

        http://blog.csdn.net/chenglinhust/article/details/7667557

        用途說明:
         創建靜態庫.a文件。
         常用參數:

        格式: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 

         

         

        示例二 在makefile中使用

        Makefile代碼

        $(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]#


        *博客內容為網友個人發布,僅代表博主個人觀點,如有侵權請聯系工作人員刪除。



        關鍵詞: linux命令

        技術專區

        關閉
        主站蜘蛛池模板: 玉门市| 石嘴山市| 樟树市| 泌阳县| 文成县| 麻阳| 湘阴县| 阜城县| 理塘县| 桃源县| 汶川县| 奉新县| 沁阳市| 昌乐县| 开江县| 康马县| 加查县| 蒙山县| 宁津县| 广宁县| 岳西县| 靖宇县| 连江县| 垣曲县| 天津市| 海晏县| 凤冈县| 龙海市| 三都| 栾川县| 仁布县| 集安市| 廉江市| 五峰| 肇源县| 博白县| 永胜县| 若羌县| 轮台县| 专栏| 怀柔区|