gcc 靜態庫製作之ar命令使用

2021-10-02 23:47:35 字數 1709 閱讀 3863

前言

我們通常把一些公用函式製作成函式庫,供其他程式使用。函式庫分為靜態庫和動態庫兩種。本文講解如何製作屬於自己的靜態庫。

什麼是靜態庫?

通常來說,靜態庫以.a作為字尾,且以lib開頭。類似於lib***.a。靜態庫在程式編譯時會被連線到目標**中,程式執行時將不再需要該靜態庫。

ar命令詳解

linux ar命令用於建立或者操作靜態庫。

ar命令的引數如下:

引數意義

-r將objfile檔案插入靜態庫尾或者替換靜態庫中同名檔案

-x從靜態庫檔案中抽取檔案objfile

-t列印靜態庫的成員檔案列表

-d從靜態庫中刪除檔案objfile

-s重置靜態庫檔案索引

-v顯示詳細資訊

-c建立靜態庫檔案

製作靜態庫

test.c

#include

#include

"test.h"

void

test()

test.h

#define __test_h__

#ifndef __test_h__

void

test()

;#endif

編譯成可重定位檔案,即生成.o檔案:

為了製作成靜態庫,我們需要使用ar命令。

ar -rcs libtest.a test.o   #庫名一般以.a為副檔名,以lib開頭

ar -t libtest.a #檢視內容

製作好了靜態庫,下面來使用它。

靜態庫的使用

編寫乙個main.c檔案進行測試:

出現資訊為test未定義引用,原因是test已經編譯成靜態庫。

靜態庫的**在編譯時鏈結到應用程式中,因此編譯時庫檔案必須存在,並且需要通過"-l"引數傳遞路徑給編譯器。

鏈結的庫名為libtest.a,在鏈結的時候,去掉開頭的lib和字尾.a,前面再加l,就變成了-ltest,其他庫也是類似。

例如,你如果看到程式鏈結使用-lm,說明它使用了名為libm.a的庫。可以參考這一篇在編譯時時為什麼要鏈結 -lm 總結

編譯靜態庫時先使用-rcs選項,再利用ar工具產生,然後把一些檔案可重定位檔案打包在一起。

gcc之動態庫 靜態庫製作

靜態庫製作 編譯 gcc c o main.o main.c gcc c o sub.o sub.c gcc c o sub2.o sub2.c ar crs libsub.a sub.o sub2.o 可以使用多個.o生成靜態庫 gcc o test main.o libsub.a 如果.a不在當...

建立並使用靜態庫(ar 命令)

建立並使用靜態庫 ar 命令 archive命令的功能是 建立或修改歸檔檔案或者從歸檔檔案中析取資訊。可以簡單的理解為乙個打包工具,將成員檔案按照一定的規則構建到.a檔案中,通常這種型別的歸檔檔案用來將常用的例程組織為乙個靜態庫,方便應用程式的鏈結。重要引數 d 從archive中刪除模組,若指定v...

建立並使用靜態庫(ar 命令)

建立並使用靜態庫 ar 命令 archive命令的功能是 建立或改動歸檔檔案或者從歸檔檔案裡析取資訊。能夠簡單的理解為乙個打包工具,將成員檔案依照一定的規則構建到.a檔案裡,通常這樣的型別的歸檔檔案用來將經常使用的例程組織為乙個靜態庫,方便應用程式的鏈結。重要引數 d 從archive中刪除模組,若...