亚洲一区亚洲二区亚洲三区,国产成人高清在线,久久久精品成人免费看,999久久久免费精品国产牛牛,青草视频在线观看完整版,狠狠夜色午夜久久综合热91,日韩精品视频在线免费观看

ar和nm命令的使用Unix系統(tǒng) -電腦資料

電腦資料 時(shí)間:2019-01-01 我要投稿
【www.ishadingyu.com - 電腦資料】

    當(dāng)我們的程序中有經(jīng)常使用的模塊,而且這種模塊在其他程序中也會(huì)用到,這時(shí)按照軟件重用的思想,我們應(yīng)該將它們生成庫,使得以后編程可以減少 開發(fā) 代碼量,

ar和nm命令的使用Unix系統(tǒng)

。這里介紹兩個(gè)命令ar和nm,用來對(duì)庫操作。 By Wing, 出處:only_you 當(dāng)我們的程序中有經(jīng)常使用的模塊

    當(dāng)我們的程序中有經(jīng)常使用的模塊,而且這種模塊在其他程序中也會(huì)用到,這時(shí)按照軟件重用的思想,我們應(yīng)該將它們生成庫,使得以后編程可以減少開發(fā)代碼量。這里介紹兩個(gè)命令ar和nm,用來對(duì)庫操作。

   

    By Wing, 出處:only_you

    當(dāng)我們的程序中有經(jīng)常使用的模塊,而且這種模塊在其他程序中也會(huì)用到,這時(shí)按照軟件重用的思想,我們應(yīng)該將它們生成庫,使得以后編程可以減少開發(fā)代碼量。這里介紹兩個(gè)命令ar和nm,用來對(duì)庫操作。

    1、ar基本用法

    ar命令可以用來創(chuàng)建、修改庫,也可以從庫中提出單個(gè)模塊。庫是一單獨(dú)的文件,里面包含了按照特定的結(jié)構(gòu)組織起來的其它的一些文件(稱做此庫文件的member)。原始文件的內(nèi)容、模式、時(shí)間戳、屬主、組等屬性都保留在庫文件中。

    下面是ar命令的格式:

    ar[-][abcfilNoPsSuvV][membername][count]archivefiles...

    例如我們可以用ar rvl ibtest.a hello.o hello1.o來生成一個(gè)庫,庫名字是test,鏈接時(shí)可以用-ltest鏈接。該庫中存放了兩個(gè)模塊hello.o和hello1.o。選項(xiàng)前可以有‘-’字符,也可以沒有。下面我們來看看命令的操作選項(xiàng)和任選項(xiàng),F(xiàn)在我們把部分稱為操作選項(xiàng),而[abcfilNoPsSuvV]部分稱為任選項(xiàng)。

    中的操作選項(xiàng)在命令中只能并且必須使用其中一個(gè),它們的含義如下:

    d:從庫中刪除模塊。按模塊原來的文件名指定要?jiǎng)h除的模塊。如果使用了任選項(xiàng)v則列出被刪除的每個(gè)模塊。

    m:該操作是在一個(gè)庫中移動(dòng)成員。當(dāng)庫中如果有若干模塊有相同的符號(hào)定義(如函數(shù)定義),則成員的位置順序很重要。如果沒有指定任選項(xiàng),任何指定的成員將移到庫的最后。也可以使用’a’,’b’,或’I’任選項(xiàng)移動(dòng)到指定的位置。

    p:顯示庫中指定的成員到標(biāo)準(zhǔn)輸出。如果指定任選項(xiàng)v,則在輸出成員的內(nèi)容前,將顯示成員的名字。如果沒有指定成員的名字,所有庫中的文件將顯示出來。

    q:快速追加。增加新模塊到庫的結(jié)尾處。并不檢查是否需要替換!痑’,’b’,或’I’任選項(xiàng)對(duì)此操作沒有影響,模塊總是追加的庫的結(jié)尾處。如果使用了任選項(xiàng)v則列出每個(gè)模塊。這時(shí),庫的符號(hào)表沒有更新,可以用’ars’或ranlib來更新庫的符號(hào)表索引。

    r:在庫中插入模塊(替換)。當(dāng)插入的模塊名已經(jīng)在庫中存在,則替換同名的模塊。如果若干模塊中有一個(gè)模塊在庫中不存在,ar顯示一個(gè)錯(cuò)誤消息,并不替換其他同名模塊。默認(rèn)的情況下,新的成員增加在庫的結(jié)尾處,可以使用其他任選項(xiàng)來改變?cè)黾拥奈恢谩?/p>

    t:顯示庫的模塊表清單。一般只顯示模塊名。

    x:從庫中提取一個(gè)成員。如果不指定要提取的模塊,則提取庫中所有的模塊。

    下面在看看可與操作選項(xiàng)結(jié)合使用的任選項(xiàng):

    a:在庫的一個(gè)已經(jīng)存在的成員后面增加一個(gè)新的文件。如果使用任選項(xiàng)a,則應(yīng)該為命令行中membername參數(shù)指定一個(gè)已經(jīng)存在的成員名。

    b:在庫的一個(gè)已經(jīng)存在的成員前面增加一個(gè)新的文件。如果使用任選項(xiàng)b,則應(yīng)該為命令行中membername參數(shù)指定一個(gè)已經(jīng)存在的成員名。

    c:創(chuàng)建一個(gè)庫。不管庫是否存在,都將創(chuàng)建。

    f:在庫中截短指定的名字。缺省情況下,文件名的長度是不受限制的,可以使用此參數(shù)將文件名截短,以保證與其它系統(tǒng)的兼容。

    i:在庫的一個(gè)已經(jīng)存在的成員前面增加一個(gè)新的文件。如果使用任選項(xiàng)i,則應(yīng)該為命令行中membername參數(shù)指定一個(gè)已經(jīng)存在的成員名(類似任選項(xiàng)b)。

    l:暫未使用

    N:與count參數(shù)一起使用,在庫中有多個(gè)相同的文件名時(shí)指定提取或輸出的個(gè)數(shù)。

    o:當(dāng)提取成員時(shí),保留成員的原始數(shù)據(jù)。如果不指定該任選項(xiàng),則提取出的模塊的時(shí)間將標(biāo)為提取出的時(shí)間。

    P:進(jìn)行文件名匹配時(shí)使用全路徑名。ar在創(chuàng)建庫時(shí)不能使用全路徑名(這樣的庫文件不符合POSIX標(biāo)準(zhǔn)),但是有些工具可以。

    s:寫入一個(gè)目標(biāo)文件索引到庫中,或者更新一個(gè)存在的目標(biāo)文件索引。甚至對(duì)于沒有任何變化的庫也作該動(dòng)作。對(duì)一個(gè)庫做ars等同于對(duì)該庫做ranlib。

    S:不創(chuàng)建目標(biāo)文件索引,這在創(chuàng)建較大的庫時(shí)能加快時(shí)間。

    u:一般說來,命令arr…插入所有列出的文件到庫中,如果你只想插入列出文件中那些比庫中同名文件新的文件,就可以使用該任選項(xiàng)。該任選項(xiàng)只用于r操作選項(xiàng)。

    v:該選項(xiàng)用來顯示執(zhí)行操作選項(xiàng)的附加信息。

    V:顯示ar的版本。

    2、nm基本用法命令

    nm用來列出目標(biāo)文件的符號(hào)清單。下面是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命令指出目標(biāo)文件,則nm假定目標(biāo)文件是a.out,

電腦資料

ar和nm命令的使用Unix系統(tǒng)》(http://www.ishadingyu.com)。下面列出該命令的任選項(xiàng),大部分支持“-”開頭的短格式和“-“開頭的長格式。

    -A、-o或--print-file-name:在找到的各個(gè)符號(hào)的名字前加上文件名,而不是在此文件的所有符號(hào)前只出現(xiàn)文件名一次。

    例如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:顯示調(diào)試符號(hào)。

    -B:等同于--format=bsd,用來兼容MIPS的nm。

    -C或--demangle:將低級(jí)符號(hào)名解碼(demangle)成用戶級(jí)名字。這樣可以使得C++函數(shù)名具有可讀性。

    -D或--dynamic:顯示動(dòng)態(tài)符號(hào)。該任選項(xiàng)僅對(duì)于動(dòng)態(tài)目標(biāo)(例如特定類型的共享庫)有意義。

    -fformat:使用format格式輸出。format可以選取bsd、sysv或posix,該選項(xiàng)在GNU的nm中有用。默認(rèn)為bsd。

    -g或--extern-only:僅顯示外部符號(hào)。

    -n、-v或--numeric-sort:按符號(hào)對(duì)應(yīng)地址的順序排序,而非按符號(hào)名的字符順序。

    -p或--no-sort:按目標(biāo)文件中遇到的符號(hào)順序顯示,不排序。

    -P或--portability:使用POSIX.2標(biāo)準(zhǔn)輸出格式代替默認(rèn)的輸出格式。等同于使用任選項(xiàng)-fposix。

    -s或--print-armap:當(dāng)列出庫中成員的符號(hào)時(shí),包含索引。索引的內(nèi)容包含:哪些模塊包含哪些名字的映射。

    -r或--reverse-sort:反轉(zhuǎn)排序的順序(例如,升序變?yōu)榻敌?。

    --size-sort:按大小排列符號(hào)順序。該大小是按照一個(gè)符號(hào)的值與它下一個(gè)符號(hào)的值進(jìn)行計(jì)算的。

    -tradix或--radix=radix:使用radix進(jìn)制顯示符號(hào)值。radix只能為“d”表示十進(jìn)制、“o”表示八進(jìn)制或“x”表示十六進(jìn)制。

    --target=bfdname:指定一個(gè)目標(biāo)代碼的格式,而非使用系統(tǒng)的默認(rèn)格式。

    -u或--undefined-only:僅顯示沒有定義的符號(hào)(那些外部符號(hào))。

    -l或--line-numbers:對(duì)每個(gè)符號(hào),使用調(diào)試信息來試圖找到文件名和行號(hào)。對(duì)于已定義的符號(hào),查找符號(hào)地址的行號(hào)。對(duì)于未定義符號(hào),查找指向符號(hào)重定位入口的行號(hào)。如果可以找到行號(hào)信息,顯示在符號(hào)信息之后。

    -V或--version:顯示nm的版本號(hào)。

    --help:顯示nm的任選項(xiàng)。

    ar cs libmy.a//創(chuàng)建一個(gè)庫

    ar rs libmy.a 1.o//增加一個(gè)模塊

    ar t libmy.a//顯示庫里的模塊

    ar d libmy.a 1.o//刪除一個(gè)模塊

    原文轉(zhuǎn)自:http://www.ltesting.net

最新文章