新聞中心

armlink 使用方法詳解

作者: 時(shí)間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
armlink使用方法詳解一、基本術(shù)語
在介紹armlink的使用方法之前,先介紹要涉及到的一些術(shù)語。
1)映像文件(image):
是指一個(gè)可執(zhí)行文件,在執(zhí)行的時(shí)候被加載到處理器中。一個(gè)映像文件有多個(gè)線程。它是ELF(Executableandlinkingformat)格式的。段(Section):描述映像文件的代碼或數(shù)據(jù)塊。

2)RO
是Read-only的簡寫形式。

3)RW
是Read-write.的簡寫形式。

4)ZI
是Zero-initialized的簡寫形式。

5)輸入段(inputsection)
它包含著代碼,初始化數(shù)據(jù)或描述了在應(yīng)用程序運(yùn)行之前必須要初始化為0的一段內(nèi)存。

6)輸出段(outputsection)
它包含了一系列具有相同的RO,RW或ZI屬性的輸入段。

7)域(Regions)
在一個(gè)映像文件中,一個(gè)域包含了1至3個(gè)輸出段。多個(gè)域組織在一起,就構(gòu)成了最終的映像文件。

8)ReadOnlyPositionIndependent(ROPI)
它是指一個(gè)段,在這個(gè)段中代碼和只讀數(shù)據(jù)的地址在運(yùn)行時(shí)候可以改變。

9)ReadWritePositionIndependent(RWPI)
它是指一個(gè)段,在該段中的可讀/寫的數(shù)據(jù)地址在運(yùn)行期間可以改變。

10)加載時(shí)地址
是指映像文件位于存儲(chǔ)器(在該映像文件沒有運(yùn)行時(shí))中的地址。

11)運(yùn)行時(shí)地址
是指映像文件在運(yùn)行時(shí)的地址。

二、命令語法
armlink[-help][-vsn][-partial][-outputfile][-elf][-reloc][-ro-baseaddress][-ropi][-rw-baseaddress][-rwpi][-split][-scatterfile][-debug|-nodebug][-remove?RO/RW/ZI/DBG]|-noremove][-entrylocation][-keepsection-id][-firstsection-id][-lastsection-id][-libpathpathlist][-scanlib|-noscanlib][-locals|-nolocals][-callgraph][-infotopics][-map][-symbols][-symdefsfile][-editfile][-xref][-xreffromobject(section)][-xreftoobject(section)][-errorsfile][-listfile][-verbose][-unmangled|-mangled][-matchcrossmangled][-viafile][-strict][-unresolvedsymbol][-MI|-LI|-BI][input-file-list]

上面各選項(xiàng)的含義分別為:
1)-help這個(gè)選項(xiàng)會(huì)列出在命令行中常用的一些選項(xiàng)操作。

2)-vsn這個(gè)選項(xiàng)顯示出所用的armlink的版本信息。

3)-partial用這個(gè)選項(xiàng)創(chuàng)建的是部分鏈接的目標(biāo)文件而不是可執(zhí)行映像文件。

4)-outputfile這個(gè)選項(xiàng)指定了輸出文件名,該文件可能是部分鏈接的目標(biāo)文件,也可能是可執(zhí)行映像文件。如果輸出文件名沒有特別指定的話,armlink將使用下面的默認(rèn):如果輸出是一個(gè)可執(zhí)行映像文件,則生成的輸出文件名為__image.axf;如果輸出是一個(gè)部分鏈接的目標(biāo)文件,在生成的文件名為__object.o;如果沒有指定輸出文件的路徑信息,則輸出文件就在當(dāng)前目錄下生成。如果指定了路徑信息,則所指定的路徑成為輸出文件的當(dāng)前路徑。

5)-elf這個(gè)選項(xiàng)生成ELF格式的映像文件,這也是armlink所支持的唯一的一種輸出格式,這是默認(rèn)選項(xiàng)。

6)-reloc這個(gè)選項(xiàng)生成可重定址的映像。一個(gè)可重定址的映像具有動(dòng)態(tài)的段,這個(gè)段中包含可重定址信息,利用這些信息可以在鏈接后,進(jìn)行映像文件的重新定址;-reloc,-rw-base一起使用,但是如果沒有-split選項(xiàng),鏈接時(shí)會(huì)產(chǎn)生錯(cuò)誤。

7)-ro-baseaddress這個(gè)選項(xiàng)將包含有RO(Read-Only屬性)輸出段的加載地址和運(yùn)行地址設(shè)置為address,該地址必須是字對齊的,如果沒有指定這個(gè)選項(xiàng),則默認(rèn)的RO基地址值為0x8000。

8)-ropi這個(gè)選項(xiàng)使得包含有RO輸出段的加載域和運(yùn)行域是位置無關(guān)的。如果該選項(xiàng)沒有使用,則相應(yīng)的域被標(biāo)記為絕對的。通常每一個(gè)只讀屬性的輸入段必須是只讀位置無關(guān)的。如果使用了這個(gè)選項(xiàng),armlink將會(huì)進(jìn)行以下操作:檢查各段之間的重定址是否有效;確保任何由armlink自身生成的代碼是只讀位置無關(guān)的。這里希望讀者注意的是,ARM工具直到armlink完成了對輸入段的處理后,才能夠決定最終的生成映像是否為只讀位置無關(guān)的。這就意味著,即使為編譯器和匯編器指定了ROPI選項(xiàng),armlink也可能會(huì)產(chǎn)生ROPI錯(cuò)誤信息。-

9)rw-baseaddress這個(gè)選項(xiàng)設(shè)置包含RW(Read/Write屬性)輸出段的域的運(yùn)行時(shí)地址,該地址必須是字對齊的。如果這個(gè)選項(xiàng)和-split選項(xiàng)一起使用,將設(shè)置包含RW輸出段的域的加載和運(yùn)行時(shí)地址都設(shè)置在address處。

10)-rwpi這個(gè)選項(xiàng)使得包含有RW和ZI(ZeroInitialization,初始化為0)屬性的輸出段的加載和運(yùn)行時(shí)域為位置無關(guān)的。如果該選項(xiàng)沒有使用,相應(yīng)域標(biāo)記為絕對的。這個(gè)選項(xiàng)要求-rw-base選項(xiàng)后有值,如果-rw-base沒有指定的話,默認(rèn)其值為0,即相當(dāng)于-rw-base0。通常每一個(gè)可寫的輸入段必須是可讀/可寫的位置無關(guān)的。如果使用了該選項(xiàng),armlink會(huì)進(jìn)行以下的操作:檢查可讀/可寫屬性的運(yùn)行域的輸入段是否設(shè)置了位置無關(guān)屬性;檢查在各段之間的重定址是否有效;生成基于靜態(tài)寄存器sb的條目,這些在RO和RW域被拷貝和初始化的時(shí)候會(huì)用到。編譯器并不會(huì)強(qiáng)制可寫的數(shù)據(jù)一定要為位置無關(guān)的,這就是說,即使在為編譯器和匯編器指定了RWPI選項(xiàng),armlink也可能生成數(shù)據(jù)不是RWPI的信息。

11)-split這個(gè)選項(xiàng)將包含RO和RW屬性的輸出段的加載域,分割成2個(gè)加載域。一個(gè)是包含RO輸出段的加載域,默認(rèn)的加載地址為0x8000,但是可以用-ro-base選項(xiàng)設(shè)置其他的地址值,另一個(gè)加載域包含RW屬性的輸出段,由-rw-base選項(xiàng)指定加載地址,如果沒有使用-rw-base選項(xiàng)的話,默認(rèn)使用的是-rw-base0。

12)-scatterfile這個(gè)選項(xiàng)使用在file中包含的分組和定位信息來創(chuàng)建映像內(nèi)存映射。注意,如果使用了該選項(xiàng)的話,必須要重新實(shí)現(xiàn)堆棧初始化函數(shù)__user_initial_stackheap()。

13)-debug這個(gè)選項(xiàng)使輸出文件包含調(diào)試信息,調(diào)試信息包括,調(diào)試輸入段,符號(hào)和字符串表。這是默認(rèn)的選項(xiàng)。

14)-nodebug這個(gè)選項(xiàng)使得在輸出文件中不包含調(diào)試信息。生成的映像文件短小,但是不能進(jìn)行源碼級的調(diào)試。armlink對在輸入的目標(biāo)文件和庫函數(shù)中發(fā)現(xiàn)的任何調(diào)試輸入段都不予處理,當(dāng)加載映像文件到調(diào)試器中的時(shí)候,也不包含符號(hào)和字符串信息表。這個(gè)選項(xiàng)僅僅是對裝載到調(diào)試器的映像文件的大小有影響,但是對要下載到目標(biāo)板上的二進(jìn)制代碼的大小沒有任何影響。如果用armlink進(jìn)行部分鏈接生成目標(biāo)文件而不是映像文件,則雖然在生成的目標(biāo)文件中不含有調(diào)試輸入段,但是會(huì)包含符號(hào)和字符串信息表。這里特別請讀者注意的是:如果要在鏈接完成后使用fromELF工具的話,不可使用-nodebug選項(xiàng),這是因?yàn)槿绻傻挠诚裎募胁话{(diào)試信息的話,則有下面的影響:fromELF不能將映像文件轉(zhuǎn)換成其他格式的文件;fromELF不能生成有意義的反匯編列表。
15)-remove(RO/RW/ZI/DBG)使用這個(gè)選項(xiàng)會(huì)將在輸入段未使用的段從映像文件中刪除。如果輸入段中含有映像文件入口點(diǎn)或者該輸入段被一個(gè)使用的段所引用,則這樣的輸入段會(huì)當(dāng)作已使用的段。
在使用這個(gè)選項(xiàng)時(shí)候要注意,不要?jiǎng)h除異常處理函數(shù)。使用-keep選項(xiàng)來標(biāo)識(shí)異常處理函數(shù),或用ENTRY偽指令標(biāo)明是入口點(diǎn)。為了更精確的控制刪除未使用的段,可以使用段屬性限制符??梢允褂靡韵碌亩螌傩韵拗品?br />RO刪除所有未使用的RO屬性的段;
RW刪除所有未使用的RW屬性的段;
ZI刪除所有未使用的ZI屬性的段;
DBG刪除所有未使用的DEBUG屬性的段。
這些限制符出現(xiàn)的順序是任意的,但是它們必須要有”()”括住,多個(gè)限制符之間要用符號(hào)”/”進(jìn)行間隔。ADS軟件中默認(rèn)選項(xiàng)是-remove(RO/RW/ZI/DBG)。如果沒有指定段屬性限制符,則所有未使用的段都會(huì)被刪除。因?yàn)?remove就等價(jià)于-remove(RO/RW/ZI/DBG)選項(xiàng)。

16)-noremove這個(gè)選項(xiàng)保留映像文件中所有未被使用的段。

17)-entrylocation這個(gè)選項(xiàng)指定映像文件中唯一的初始化入口點(diǎn)。一個(gè)映像文件可以包含多個(gè)入口點(diǎn),使用這個(gè)命令定義的初始化入口點(diǎn)是存放在可執(zhí)行文件的頭部,以供加載程序加載時(shí)使用。當(dāng)一個(gè)映像文件被裝載時(shí),ARM調(diào)試器使用這個(gè)入口點(diǎn)地址來初始化PC指針。初始化入口點(diǎn)必須滿足下面的條件:映像文件的入口點(diǎn)必須位于運(yùn)行域內(nèi);運(yùn)行域必須是非覆蓋的,并且必須是固定域(就是說,加載域和運(yùn)行域的地址相同)。
在這里可以用以下的參數(shù)代替location參數(shù):
1.入口點(diǎn)地址:這是一個(gè)數(shù)值,例如-entry0x0;
2.符號(hào):該選項(xiàng)指定映像文件的入口點(diǎn)為該符號(hào)所代表的地址處,比如:
-entryint_handler表示程序入口點(diǎn)在符號(hào)int_handler所在處。如果該符號(hào)有多處定義存在,armlink將產(chǎn)生出錯(cuò)信息。
-entryoffset+object(section):該選項(xiàng)指定在某個(gè)目標(biāo)文件的段的內(nèi)部的某個(gè)偏移量處為映像文件的入口地址,例如:-entry8+startup(startupseg)如果偏移量值為0,可以簡寫成object(section),如果輸入段只有一個(gè),則可以簡化為object。

18)-keepsection-id使用該選項(xiàng),可以指定保留一個(gè)輸入段,這樣的話,即使該輸入段沒有在映像文件中使用,也不會(huì)被刪除。
參數(shù)section-id取下面一些格式:
1.symbol該選項(xiàng)指定定義symbol的輸入段不會(huì)在刪除未使用的段時(shí)被刪除。如果映像文件中有多處symbol定義存在,則所有包含symbol定義的輸入段都不會(huì)被刪除。例如:-keepint_handler則所有定義int_handler的符號(hào)的段都會(huì)保留,而不被刪除。為了保留所有含有以_handler結(jié)尾的符號(hào)的段,可以使用如下的選項(xiàng):-keep*_handler
2.object(section)這個(gè)選項(xiàng)指定了在刪除未使用段時(shí),保留目標(biāo)文件中的section段。輸入段和目標(biāo)名是不區(qū)分大小寫的,例如,為了在目標(biāo)文件vectors.o中保留vect段,使用:-keepvectors.o(vect)為了保留vectors.o中的所有以vec開頭的段名,可以使用選項(xiàng):-keepvectors.o(vec*)
3.object這個(gè)選項(xiàng)指定在刪除未使用段時(shí),保留該目標(biāo)文件唯一的輸入段。目標(biāo)名是不區(qū)分大小寫的,如果使用這個(gè)選項(xiàng)的時(shí)候,目標(biāo)文件中所含的輸入段不止一個(gè)的話,armlink會(huì)給出出錯(cuò)信息。比如,為了保留每一個(gè)以dsp開頭的只含有唯一輸入段的目標(biāo)文件,可以使用如下的選項(xiàng):-keepdsp*.o

19)-firstsection-id這個(gè)選項(xiàng)將被選擇的輸入段放在運(yùn)行域的開始。通過該選項(xiàng),將包含復(fù)位和中斷向量地址的段放置在映像文件的開始,可以用下面的參數(shù)代替section-id:
1.symbol選擇定義symbol的段。禁止指定在多處定義的symbol,因?yàn)槎鄠€(gè)段不能同時(shí)放在映像文件的開始。
2.object(section)從目標(biāo)文件中選擇段放在映像文件的開始位置。在目標(biāo)文件和括號(hào)之間不允許存在空格,例如-firstinit.o(init)
3.object選擇只有一個(gè)輸入段的目標(biāo)文件。如果這個(gè)目標(biāo)文件包含多個(gè)輸入段,armlink會(huì)產(chǎn)生錯(cuò)誤信息。用這個(gè)選項(xiàng)的例子如下:-firstinit.o這里希望讀者注意的是:使用-first不能改變在域中按照RO段放在開始,接著放置RW段,最后放置ZI段的基本屬性排放順序。如果一個(gè)域含有RO段,則RW或ZI段就不能放在映像文件的開頭。類似地,如果一個(gè)域有RO或RW段,則ZI段就不能放在文件開頭。兩個(gè)不同的段不能放在同一個(gè)運(yùn)行時(shí)域的開頭,所以使用該選項(xiàng)的時(shí)候只允許將一個(gè)段放在映像文件的開頭。

20)-lastsection-id這個(gè)選項(xiàng)將所選擇的輸入段放在運(yùn)行域的最后。例如,用這個(gè)選項(xiàng)能夠強(qiáng)制性的將包含校驗(yàn)和的輸入段放置在RW段的最后。使用下面的參數(shù)可以替換section-id。
1.symbol選擇定義symbol的段放置在運(yùn)行域的最后。不能指定一個(gè)有多處定義的symbol。使用該參數(shù)的例子如下:-lastchecksum
2.object(section)從目標(biāo)文件中選擇section段。在目標(biāo)文件和后面的括號(hào)間不能有空格,用該參數(shù)的例子為:-lastchecksum.o(check)
3.object選擇只有一個(gè)輸入段的目標(biāo),如果該目標(biāo)文件中有多個(gè)輸入段,armlink會(huì)給出出錯(cuò)信息。和-first選項(xiàng)一樣,需要讀者注意的是;使用-last選項(xiàng)不能改變在域中將RO段放在開始,接著放置RW段,最后放置ZI段的輸出段基本的排放順序。如果一個(gè)域含有ZI段,則RW段不能放在最后,如果一個(gè)域含有RW或ZI段,則RO段不能放在最后。在同一個(gè)運(yùn)行域中,兩個(gè)不同的段不能同時(shí)放在域的最后位置。

21)-libpathpathlist這個(gè)選項(xiàng)為ARM標(biāo)準(zhǔn)的C和C++庫指定了搜索路徑列表。注意,這個(gè)選項(xiàng)不會(huì)影響對用戶庫的搜索路徑。這個(gè)選項(xiàng)覆蓋了環(huán)境變量ARMLIB所指定的路徑。參數(shù)pathlist是一個(gè)以逗號(hào)分開的多個(gè)路徑列表,即為path1,path2,...pathn,這個(gè)路徑列表只是用來搜索要用到的ARM庫函數(shù)。默認(rèn)的,對于包含ARM庫函數(shù)的默認(rèn)路徑是由環(huán)境變量ARMLIB所指定的。

22)-scanlib這個(gè)選項(xiàng)啟動(dòng)對默認(rèn)庫(標(biāo)準(zhǔn)ARMC和C++庫)的掃描以解析引用的符號(hào)。這個(gè)選項(xiàng)是默認(rèn)的設(shè)置。

23)-noscanlib該選項(xiàng)禁止在鏈接時(shí)候掃描默認(rèn)的庫。

24)-locals這個(gè)選項(xiàng)指導(dǎo)鏈接器在生成一個(gè)可執(zhí)行映像文件的時(shí)候,將本地符號(hào)添加到輸出符號(hào)信息表中。該選項(xiàng)是默認(rèn)設(shè)置。

25)-nolocals這個(gè)選項(xiàng)指導(dǎo)鏈接器在生成一個(gè)可執(zhí)行映像文件的時(shí)候,不要將本地符號(hào)添加到輸出符號(hào)信息表中。如果想減小輸出符號(hào)表的大小,可以使用該選項(xiàng)。

26)-callgraph該選項(xiàng)創(chuàng)建一個(gè)HTML格式的靜態(tài)函數(shù)調(diào)用圖。這個(gè)調(diào)用圖給出了映像文件中所有函數(shù)的定義和引用信息。對于每一個(gè)函數(shù)它列出了:
1.函數(shù)編譯時(shí)候的處理器狀態(tài)(ARM狀態(tài)還是Thumb狀態(tài));
2.調(diào)用func函數(shù)的集合;
3.被func調(diào)用的函數(shù)的集合;
4.在映像文件中使用的func尋址的次數(shù)。
此外,調(diào)用圖還標(biāo)識(shí)了下面的函數(shù):
1.被interworkingveneers所調(diào)用的函數(shù);
2.在映像文件外部定義的函數(shù);
3.允許未被定義的函數(shù)(以weak方式的引用);
靜態(tài)調(diào)用圖還提供了堆棧使用信息,它顯示出了:
1.每個(gè)函數(shù)所使用的堆棧大??;
2.在全部的函數(shù)調(diào)用中,所用到的最大堆棧大小。

27)-infotopics這個(gè)選項(xiàng)打印出關(guān)于指定種類的信息,這里的參數(shù)topics是指用逗號(hào)間隔的類型標(biāo)識(shí)符列表。類型標(biāo)識(shí)符列表可以是下面所列出的任意一個(gè):
1.sizes為在映像文件中的每一個(gè)輸入對象和庫成員列出了代碼和數(shù)據(jù)(這里的數(shù)據(jù)包括,RO數(shù)據(jù),RW數(shù)據(jù),ZI數(shù)據(jù)和Debug數(shù)據(jù))的大?。?br />2.totals為輸入對象文件和庫,列出代碼和數(shù)據(jù)(這里的數(shù)據(jù)包括,RO數(shù)據(jù),RW數(shù)據(jù),ZI數(shù)據(jù)和Debug數(shù)據(jù))總的大??;
3.veneers給出由armlink生成的veneers的詳細(xì)信息;
4.unused列出由于使用-remove選項(xiàng)而從映像文件中被刪除的所有未使用段。注意:在信息類型標(biāo)識(shí)符列表之間不能存在空格,比如可以輸入-infosizes,totals但是不能是-infosizes,totals(即在逗號(hào)和totals之間有空格是不允許的)

28)-map這個(gè)選項(xiàng)創(chuàng)建映像文件的信息圖。映像文件信息圖包括映像文件中的每個(gè)加載域,運(yùn)行域和輸入段的大小和地址,這里的輸入段還包括調(diào)試信息和鏈接器產(chǎn)生的輸入段。

29)-symbols這個(gè)選項(xiàng)列出了鏈接的時(shí)候使用的每一個(gè)局部和全局符號(hào)。該符號(hào)還包括鏈接生成的符號(hào)。

30)-symdefsfile這個(gè)選項(xiàng)創(chuàng)建一個(gè)包含來自輸出映像文件的全局符號(hào)定義的符號(hào)定義文件。默認(rèn)的,所有的全局符號(hào)都寫入到符號(hào)定義文件中。如果文件file已經(jīng)存在,鏈接器將限制生成在已存在的symdefs文件中已列出的符號(hào)。如果文件file沒有指明路徑信息,鏈接器將在輸出映像文件的路徑搜索文件。如果文件沒有找到,就會(huì)在該目錄下面創(chuàng)建文件。在鏈接另一個(gè)映像文件的時(shí)候,可以將符號(hào)定義文件作為鏈接的輸入文件。

31)-editfile這個(gè)選項(xiàng)指定一個(gè)steering類型的文件,該文件包含用于修改輸出文件中的符號(hào)信息表的命令??梢栽趕teering文件中指定具有以下功能的命令:隱藏全局符號(hào)。使用該選項(xiàng)可以在目標(biāo)文件中隱藏指定的全局符號(hào)。重命名全局符號(hào)。使用這個(gè)選項(xiàng)可以解決符號(hào)命名沖突的現(xiàn)象。

32)-xref該選項(xiàng)列出了在輸入段間的所有交叉引用。

33)-xreffromobject(section)這個(gè)選項(xiàng)列出了從目標(biāo)文件中的輸入段對其他輸入段的交叉引用。如果想知道某個(gè)指定的輸入段中的引用情況,就可以使用該選項(xiàng)。

34)-xreftoobject(section)該選項(xiàng)列出了從其他輸入段到目標(biāo)文件輸入段的引用。

35)-errorsfile使用該選項(xiàng)會(huì)將診斷信息從標(biāo)準(zhǔn)輸出流重定向到文件file中。

36)-listfile該選項(xiàng)將-info,-map,-symbols,-xref,-xreffrom和–xrefto這幾個(gè)選項(xiàng)的輸出重新定向到文件file中。如果文件file沒有指定路徑信息,就會(huì)在輸出路徑創(chuàng)建該文件,該路徑是輸出映像文件所在的路徑。

37)-verbose這個(gè)選項(xiàng)將有關(guān)鏈接操作的細(xì)節(jié)打印出來,包括所包括的目標(biāo)文件和要用到的庫。

38)-unmangled該選項(xiàng)指定鏈接器在由xref,-xreffrom,-xrefto,和-symbols所生成的診斷信息中顯示出unmangledC++符號(hào)名。如果使用了這個(gè)選項(xiàng),鏈接器將unmangleC++符號(hào)名以源碼的形式顯示出來。這個(gè)選項(xiàng)是默認(rèn)的。

39)-mangled這個(gè)選項(xiàng)指定鏈接器顯示由-xref,-xreffrom,-xrefto,和-symbols所產(chǎn)生的診斷信息中的mangledC++符號(hào)名。如果使用了該選項(xiàng),鏈接器就不會(huì)unmangleC++符號(hào)名了。符號(hào)名是按照它們在目標(biāo)符號(hào)表中顯示的格式顯示的。

40)-viafile該選項(xiàng)表示從文件file中讀取輸入文件名列表和鏈接器選項(xiàng)。在armlink命令行可以輸入多個(gè)-via選項(xiàng),當(dāng)然,-via選項(xiàng)也能夠不含在一個(gè)via文件中。

41)-strict這個(gè)選項(xiàng)告訴鏈接器報(bào)告可能導(dǎo)致錯(cuò)誤而不是警告的條件。

42)-unresolvedsymbol這個(gè)選項(xiàng)將未被解析的符號(hào)指向全局符號(hào)symbol。Symbol必須是已定義的全局符號(hào),否則,symbol會(huì)當(dāng)作一個(gè)未解析的符號(hào),鏈接將以失敗告終。這個(gè)選項(xiàng)在自上而下的開發(fā)中尤為有用,在這種情況下,通過將無法指向相應(yīng)函數(shù)的引用指向一個(gè)偽函數(shù)的方法,可以測試一個(gè)部分實(shí)現(xiàn)的系統(tǒng)。該選項(xiàng)不會(huì)顯示任何警告信息。

43)input-file-list這是一個(gè)以空格作為間隔符的目標(biāo)或庫的列表。有一類特殊的目標(biāo)文件,即symdef文件,也可以包含在文件列表中,為生成的映像文件提供全局的symbol值。在輸入文件列表中有兩種使用庫的方法。
1.指定要從庫中提取并作為目標(biāo)文件添加到映像文件中的特定的成員。
2.指定某庫文件,鏈接器根據(jù)需要從其中提取成員。
armlink按照以下的順序處理輸入文件列表:
1.無條件的添加目標(biāo)文件
2.使用匹配模式從庫中選擇成員加載到映像文件中去。例如使用下面的命令:armlinkmain.omylib(stdio.o)mylib(a*.o).將會(huì)無條件的把mylib庫中所有的以字母a開頭的目標(biāo)文件和stdio.o在鏈接的時(shí)候鏈接到生成的映像文件中去。
3.添加為解析尚未解析的引用的庫到庫文件列表。


關(guān)鍵詞: armlink使用方

評論


技術(shù)專區(qū)

關(guān)閉