描述
ar命令是Linux的一個(gè)備份壓縮命令linux命令,可以創(chuàng)建、修改備存文件(archive),或從備存文件中抽取成員文件。備存文件以一定的結(jié)構(gòu)打包一個(gè)至多個(gè)其它文件(即成員文件),且成員文件的內(nèi)容、模式、時(shí)間戳等信息將被保存在備存文件中。
常見的應(yīng)用是,使用ar命令將多個(gè)目標(biāo)文件(*.o)打包為靜態(tài)鏈接庫文件(*.a)。[1]
語法命令格式
ar [emulation options] [-]{dmpqrstx}[abcDfilMNoPsSTuvV] [--plugin <name>] [member-name] [count] archive-file file...
ar -M [<mri-script>]
參數(shù)
·指令參數(shù)
-d 刪除備存文件中的成員文件。
-m 變更成員文件在備存文件中的次序。
-p 顯示備存文件中的成員文件內(nèi)容。
-q 將成員文件添加到備存文件末端。
-r 將文件插入備存文件中。
-s 等價(jià)于運(yùn)行ranlib。
i<成員文件> 將文件插入備存文件中指定的成員文件之前。
o 保留備存文件中文件的日期。
s 若備存文件中包含了對象模式,可利用此參數(shù)建立備存文件的符號(hào)表。
S 不產(chǎn)生符號(hào)表。
u 只將日期較新文件插入備存文件中。
v 程序執(zhí)行時(shí)顯示詳細(xì)的信息。
V 顯示版本信息。[2]
生成靜態(tài)鏈接庫
靜態(tài)庫是目標(biāo)文件的一個(gè)集合,通常靜態(tài)庫以“.a”為后綴。靜態(tài)庫由程序ar生成,如今靜態(tài)庫已經(jīng)不像之前那么普遍了,這主要是由于現(xiàn)在的程序一般都使用動(dòng)態(tài)庫。
生成靜態(tài)鏈接庫
工具ar的選項(xiàng)-r,可以創(chuàng)建庫,并把目標(biāo)文件插入到指定庫中。目標(biāo)文件一般為C語言源文件(*.c)編譯后的文件(*.o)。
一般格式:$ar -r LibName.a ObjFile.o [ObjFile2.o] [ObjFile3.o] [...]
例如,將string.o打包為庫文件libstr.a的命令為:
$ar -rcs libstr.a string.o
使用靜態(tài)鏈接庫
其根本原因也是找不到test()函數(shù)的實(shí)現(xiàn)文件,由于該test()函數(shù)的實(shí)現(xiàn)在test.a這個(gè)靜態(tài)庫中的,故在鏈接的時(shí)候需要在其后加入test.a這個(gè)庫,鏈接命令修改為如下形式即可。動(dòng)態(tài)鏈接庫英文為dll,是dynamic link library 的縮寫形式,dll是一個(gè)包含可由多個(gè)程序同時(shí)使用的代碼和數(shù)據(jù)的庫,dll不是可執(zhí)行文件.動(dòng)態(tài)鏈接提供了一種方法,使進(jìn)程可以調(diào)用不屬于其可執(zhí)行代碼的函數(shù).函數(shù)的可執(zhí)行代碼位于一個(gè) dll 中,該 dll 包含一個(gè)或多個(gè)已被編譯、鏈接并與使用它們的進(jìn)程分開存儲(chǔ)的函數(shù).dll 還有助于共享數(shù)據(jù)和資源.多個(gè)應(yīng)用程序可同時(shí)訪問內(nèi)存中單個(gè)dll 副本的內(nèi)容.dll 是一個(gè)包含可由多個(gè)程序同時(shí)使用的代碼和數(shù)據(jù)的庫.。mingw 是gnu工具,可以生成exe程序和dll鏈接庫等windows 32位程序linux命令,是編譯工具集。