當我們的程式中有經常使用的模組,而且這種模組在其他程式中也會用到,這時按照軟體重用的思想,我們應該將它們生成庫,使得以後程式設計可以減少開發**量。這裡介紹兩個命令ar和nm,用來對庫操作。
當我們的程式中有經常使用的模組,而且這種模組在其他程式中也會用到,這時按照軟體重用的思想,我們應該將它們生成庫,使得以後程式設計可以減少開發**量。這裡介紹兩個命令ar和nm,用來對庫操作。
1、ar基本用法
ar命令可以用來建立、修改庫,也可以從庫中提出單個模組。庫是一單獨的檔案,裡面包含了按照特定的結構組織起來的其它的一些檔案(稱做此庫檔案的member)。原始檔案的內容、模式、時間戳、屬主、組等屬性都保留在庫檔案中。
下面是ar命令的格式:
ar[-][abcfilnopssuvv][membername][count]archivefiles...
例如我們可以用ar rvl ibtest.a hello.o hello1.o來生成乙個庫,庫名字是test,鏈結時可以用-ltest鏈結。該庫中存放了兩個模組hello.o和hello1.o。選項前可以有 『-』字元,也可以沒有。下面我們來看看命令的操作選項和任選項。現在我們把部分稱為操作選項,而[abcfilnopssuvv]部分稱為任選項。
中的操作選項在命令中只能並且必須使用其中乙個,它們的含義如下:
d:從庫中刪除模組。按模組原來的檔名指定要刪除的模組。如果使用了任選項v則列出被刪除的每個模組。
m:該操作是在乙個庫中移動成員。當庫中如果有若干模組有相同的符號定義(如函式定義),則成員的位置順序很重要。如果沒有指定任選項,任何指定的成員將移到庫的最後。也可以使用』a』,』b』,或』i』任選項移動到指定的位置。
p:顯示庫中指定的成員到標準輸出。如果指定任選項v,則在輸出成員的內容前,將顯示成員的名字。如果沒有指定成員的名字,所有庫中的檔案將顯示出來。
q:快速追加。增加新模組到庫的結尾處。並不檢查是否需要替換。』a』,』b』,或』i』任選項對此操作沒有影響,模組總是追加的庫的結尾處。如果使用了任選項v則列出每個模組。這時,庫的符號表沒有更新,可以用』ars』或ranlib來更新庫的符號表索引。
r:在庫中插入模組(替換)。當插入的模組名已經在庫中存在,則替換同名的模組。如果若干模組中有乙個模組在庫中不存在,ar顯示乙個錯誤訊息,並不替換其他同名模組。預設的情況下,新的成員增加在庫的結尾處,可以使用其他任選項來改變增加的位置。
t:顯示庫的模組表清單。一般只顯示模組名。
x:從庫中提取乙個成員。如果不指定要提取的模組,則提取庫中所有的模組。
下面在看看可與操作選項結合使用的任選項:
a:在庫的乙個已經存在的成員後面增加乙個新的檔案。如果使用任選項a,則應該為命令列中membername引數指定乙個已經存在的成員名。
b:在庫的乙個已經存在的成員前面增加乙個新的檔案。如果使用任選項b,則應該為命令列中membername引數指定乙個已經存在的成員名。
c:建立乙個庫。不管庫是否存在,都將建立。
f:在庫中截短指定的名字。預設情況下,檔名的長度是不受限制的,可以使用此引數將檔名截短,以保證與其它系統的相容。
i:在庫的乙個已經存在的成員前面增加乙個新的檔案。如果使用任選項i,則應該為命令列中membername引數指定乙個已經存在的成員名(類似任選項b)。
l:暫未使用
n:與count引數一起使用,在庫中有多個相同的檔名時指定提取或輸出的個數。
o:當提取成員時,保留成員的原始資料。如果不指定該任選項,則提取出的模組的時間將標為提取出的時間。
p:進行檔名匹配時使用全路徑名。ar在建立庫時不能使用全路徑名(這樣的庫檔案不符合posix標準),但是有些工具可以。
s:寫入乙個目標檔案索引到庫中,或者更新乙個存在的目標檔案索引。甚至對於沒有任何變化的庫也作該動作。對乙個庫做ars等同於對該庫做ranlib。
s:不建立目標檔案索引,這在建立較大的庫時能加快時間。
u:一般說來,命令arr…插入所有列出的檔案到庫中,如果你只想插入列出檔案中那些比庫中同名檔案新的檔案,就可以使用該任選項。該任選項只用於r操作選項。
v:該選項用來顯示執行操作選項的附加資訊。
v:顯示ar的版本。
2、nm基本用法命令
nm用來列出目標檔案的符號清單。下面是nm命令的格式:
nm[-a|--debug-syms][-g|--extern-only][-b]
[-c|--demangle][-d|--dynamic][-s|--print-armap]
[-o|--print-file-name][-n|--numeric-sort]
[-p|--no-sort][-r|--reverse-sort][--size-sort]
[-u|--undefined-only][-l|--line-numbers][--help]
[--version][-tradix|--radix=radix]
[-p|--portability][-fformat|--format=format]
[--target=bfdname][objfile...]
如果沒有為nm命令指出目標檔案,則nm假定目標檔案是a.out。下面列出該命令的任選項,大部分支援「-」開頭的短格式和「-「開頭的長格式。
-a、-o或--print-file-name:在找到的各個符號的名字前加上檔名,而不是在此檔案的所有符號前只出現檔名一次。
例如nmlibtest.a的輸出如下:
cpthread.o:
00000068tmain__8cpthreadpv
00000038tstart__8cpthread
00000014t_._8cpthread
00000000t__8cpthread
00000000?__frame_begin__
…………………………………
則nm-a的輸出如下:
libtest.a:cpthread.o:00000068tmain__8cpthreadpv
libtest.a:cpthread.o:00000038tstart__8cpthread
libtest.a:cpthread.o:00000014t_._8cpthread
libtest.a:cpthread.o:00000000t__8cpthread
libtest.a:cpthread.o:00000000?__frame_begin__
…………………………………………………………..
-a或--debug-syms:顯示除錯符號。
-b:等同於--format=bsd,用來相容mips的nm。
-c或--demangle:將低階符號名解碼(demangle)成使用者級名字。這樣可以使得c++函式名具有可讀性。
-d或--dynamic:顯示動態符號。該任選項僅對於動態目標(例如特定型別的共享庫)有意義。
-fformat:使用format格式輸出。format可以選取bsd、sysv或posix,該選項在gnu的nm中有用。預設為bsd。
-g或--extern-only:僅顯示外部符號。
-n、-v或--numeric-sort:按符號對應位址的順序排序,而非按符號名的字元順序。
-p或--no-sort:按目標檔案中遇到的符號順序顯示,不排序。
-p或--portability:使用posix.2標準輸出格式代替預設的輸出格式。等同於使用任選項-fposix。
-s或--print-armap:當列出庫中成員的符號時,包含索引。索引的內容包含:哪些模組包含哪些名字的對映。
-r或--reverse-sort:反轉排序的順序(例如,公升序變為降序)。
--size-sort:按大小排列符號順序。該大小是按照乙個符號的值與它下乙個符號的值進行計算的。
-tradix或--radix=radix:使用radix進製顯示符號值。radix只能為「d」表示十進位制、「o」表示八進位制或「x」表示十六進製制。
--target=bfdname:指定乙個目標**的格式,而非使用系統的預設格式。
-u或--undefined-only:僅顯示沒有定義的符號(那些外部符號)。
-l或--line-numbers:對每個符號,使用除錯資訊來試圖找到檔名和行號。對於已定義的符號,查詢符號位址的行號。對於未定義符號,查詢指向符號重定位入口的行號。如果可以找到行號資訊,顯示在符號資訊之後。
-v或--version:顯示nm的版本號。
--help:顯示nm的任選項。
ar cs libmy.a//建立乙個庫
ar rs libmy.a 1.o//增加乙個模組
ar t libmy.a//顯示庫里的模組
ar d libmy.a 1.o//刪除乙個模組
ar和nm命令的使用
ar和nm命令的使用 當我們的程式中有經常使用的模組,而且這種模組在其他程式中也會用到,這時按照軟體重用的思想,我們應該將它們生成庫,使得以後程式設計可以減少開發 量。這裡介紹兩個命令ar和nm,用來對庫操作。當我們的程式中有經常使用的模組,而且這種模組在其他程式中也會用到,這時按照軟體重用的思想,...
ar命令和nm命令
2008 11 19 09 49 ar create,modify and extract from archive nm list symbol from obj files 可以檢視動態庫中都有些什麼函式 當我們的程式中有經常使用的模組,而且這種模組在其他程式中也會用到,這時按照軟體重用的思想,...
AR命令和NM命令
ar create,modify and extract from archive nm list symbol from obj files 可以檢視動態庫中都有些什麼函式 當我們的程式中有經常使用的模組,而且這種模組在其他程式中也會用到,這時按照軟體重用的思想,我們應該將它們生成庫,使得以後程式...