armlinker option
一.armlinker 概念
1. 鏈接器根據鏈接的對象的構建屬性,自動選擇要鏈接的相應標準C或C++庫變體。
鏈接器可以鏈接ARM代碼、Thumb代碼和Thumb-2代碼,并自動生成交互操作膠合代碼,以便在需要時切換處理器狀態。鏈接器還可以在需要時自動生成內聯膠合代碼或長跳轉膠合代碼,以擴展跳轉指令的范圍。
2. 鏈接器支持的一些命令選項可用于為系統內存映射中的代碼和數據指定存放的位置。另外,也可以使用分散加載描述文件,在加載時和執行時指定輸出影像中各個代碼和數據節在內存中的位置。這樣可以創建跨越過個內存的復雜影像。
3. 鏈接器支持讀/寫數據壓縮,以減少輸出影像的大小。另外,連接器還可以:
· 生成關于鏈接文件的調試和引用信息
· 生成靜態調用圖并列出其堆棧的使用情況
· 控制輸出影像中符號表的內容
· 顯示輸出中代碼和數據的大小
鏈接器可提供反饋信息,以便在下次編譯文件時提示編譯器有未使用的函數。這些函數在后 面的編譯中將放在各自所在的節中,以便鏈接器將來刪除它們。
4. armlink的輸入
armlink的輸入包括
· 一個或多個ELF對象格式的目標文件
· 用armar創建的一個或過個庫。
· 一個符號定義文件
5. armlink的輸出
成功調用armlink后的輸出為下列選項之一:
· ELF可執行格式的可執行影像
· ELF共享對象格式的共享對象
· ELF對象格式的部分鏈接對象
· ELF對象格式的可重定位對象
對于簡單映像,ELF可執行文件包含相當于映像中的RO和RW輸出節的段。ELF可執行文件還具有包含映像輸出節的ELF節。
Note:
可以使用formelf將ELF可執行格式的可執行映像轉換為其他文件格式
6. 構造可執行映像
· 解析輸入目標文件之間的符號引用
· 從庫中提取對象模塊來滿足還未滿足引用的需要
· 根據屬性和名稱排序輸入節,并將屬性和名稱相似的節合并為相臨快
· 刪除未使用的節和未使用的虛擬函數
· 刪除重復的公共組合公共代碼、數據及調試節
· 根據提供的分組信息和定位信息將對象片段組織為內存區
· 給可重定位值分配地址
· 生成可執行映像
7. 構建部分鏈接對象
· 刪除重復的調試節副本
· 最小化符號表的大小
· 將未解析的引用保留為未解析狀態
· 生成一個對象,將其用作后續鏈接步驟的輸入
Note:如果使用部分鏈接,則不能通過分散加載描述文件中的名稱來引用組件對象
二.armlink command syntax
根據選項類型而定,可以分為單字母選項和關鍵字選項
(1)單字母選項
在所有單字母選項或帶參數的單字母選項之前,都有一個單短劃線- 。 選項與自變量之間可以使用空格,或者自變量可以緊跟選項之后。例如:- o file
(2)關鍵字選項
在所有關鍵字選項或帶參數的關鍵字選項前面,都有一個雙短劃線- - 。 例如:- - output file
Note:
對于使用括號的命令行參數,在 UNIX 系統上可能需要使用反斜杠 (\) 字符對括號字符進行轉義。
獲取幫助和信息
要獲取關于可用命令行選項和工具版本號的信息,請使用:
1.- - help 輸出一些常用命令行選項的匯總。
2.- - vsn 顯示鏈接器版本信息和許可證信息。
指定輸入文件列表
1.input-file-list
1>這是以空格分隔的對象、庫或符號定義 (symdefs) 文件的列表。鏈接器將整個輸入文件列表按照一定的順序排列。如果鏈接器無法解決輸入文件問題,則生成診斷消息。可以將 symdefs 文件包括在列表中,為先前生成的映像文件提供全局符號值。
2>可以用以下方式來使用輸入文件列表中的庫:
• 指定要添加到庫列表中的一個庫,用于提取解析了任何未解析的非弱引用的成員。例如,指定輸入文件列表中的mystring.lib。
note:
僅當此列表中的庫成員解析了未解析的非弱引用時,才將該列表中的庫成員添加到映像中。
• 指定從庫中提取的特定成員,并將它們作為單個對象添加到映像中。例如,指定輸入文件列表中的mystring.lib(strcmp.o)。
3>鏈接器按以下順序處理輸入文件列表:
(1) 對象無條件添加到映像中。
(2) 使用模式將從庫中選擇的成員無條件地添加到映像中(如同添加對象一樣)。例如,以下命令無條件地添加 mylib 中的所有 a*.o 對象和 stdio.o:
armlink main.o mylib(stdio.o) mylib(a*.o)
在 UNIX 平臺上,可能需要對括號進行轉義,例如:
armlink main.o mylib\(stdio.o\)
(3) 將標準 C 或 C++ 庫添加到庫列表中,以后用于解析任何遺留的引用.
2.—libpath pathless
1>指定用于搜索 ARM 標準 C 和 C++ 庫的路徑列表。
2>包含 ARM 庫的父目錄的缺省路徑由 RVCT31LIB 環境變量指定。此處指定的任何路徑都將覆蓋由 RVCT31LIB 指定的路徑。
3>pathlist 是由逗號分隔的路徑列表,僅用于搜索所需的 ARM 庫。指定多個路徑名時,在逗號和路徑名之間不要留有空格,例如path1,path2,path3,...,pathn。
4>此列表必須以 ARM 庫目錄 armlib 和 cpplib 的父目錄結束。
Note:
此選項不影響搜索用戶庫。應改為使用 --userlibpath。
3. - - [no_]scanlib
啟用或禁用掃描缺省庫(標準 ARM C 和 C++ 庫)以解析引用。- - scanlib 是缺省值。
4. - - userlibpath pathlist
1>指定用于搜索用戶庫的路徑列表。
2>pathlist 是由逗號分隔的路徑列表,用于搜索所需的庫。指定多個路徑名時,在逗號和路徑名之間不要留有空格,例如path1,path2,path3,...,pathn。
控制鏈接器行為
1- - strict 指示鏈接器將可能會產生故障的條件報告為錯誤而不是警告。其中一個條件示例是:從非交互函數獲取交互函數的地址。
2. - - [no_]strict_relocations
- - strict_relocation
指示鏈接器報告已過時的和不提倡使用的重定位的實例。在鏈接使用先前版本的 ARM 工具構建的目標文件時,最有可能發生重定位錯誤和警告。使用此選項可以確保對象的 ABI 兼容性。 缺省情況下關閉該選項,并且鏈接器在可能時自動處理不提倡使用和已過時的重定位。
指定輸出類型和輸出文件名
1.- - output file:指定輸出文件的名稱。該文件可以是部分鏈接對象或可執行映像。如果未指定輸出文件名,則鏈接器使用以下缺省名稱:
Ø __image.axf 如果輸出是可執行映像
Ø __object.o 如果輸出是部分鏈接對象。
如果指定 file 時不帶路徑信息,則它將在當前工作目錄中創建。如果指定了路徑信息,則該目錄將成為缺省的輸出目錄。
2.- - partial 創建部分鏈接對象,而不是可執行映像。
3- - reloc 創建可重定位的 ELF 映像。可重定位映像有一個包含重定位信息的動態段,可用于在鏈接后重新定位映像。鏈接后重定位的示例包括高級 ROM 構建和運行時動態加載。
如果映像在鏈接時的地址加載,則鏈接器生成的可重定位映像不需要處理重定位,并且映像的調試數據有效。當加載映像的地址與鏈接時的地址不同時,將會處理重定位,不過映像中現有的任何調試數據都將無效。
單獨使用時,- - reloc 生成的映像類似于簡單類型 1,映像的載入區屬性設置為 RELOC。有關詳細信息,請參閱第3-24 頁的類型 1,一個加載區和幾個連續執行區。
4- - shared 創建 SVr4 共享對象。
5- - sysv 創建可在 ARM Linux 上使用的 SVr4 格式的 ELF 可執行文件。
為映像指定內存映射信息
1. - - ro-base address
將包含 RO 輸出節的區的加載地址和執行地址都設置為 address。address 必須是字對齊的。如果未指定此選項,并且沒有指定分散加載文件,則缺省 RO 基址為 0x8000。
2. - - rw-base addres
將包含 RW 輸出節的區的執行地址設置為 address。 address 必須是字對齊的。
3>- - ropi 使包含 RO 輸出節的載入區和執行區與位置無關。如果未使用此選項,則將區標記為絕對地址區。通常每個只讀輸入節必須為只讀的位置無關代碼 (ROPI)。如果選擇了此選項,則鏈接器將:
• 檢查節之間的重定位信息的有效性
• 確保 armlink 本身生成的任何代碼(如交互操作膠合代碼)為只讀的位置無關代碼。
4>- - rwpi 將包含 RW 和 ZI 輸出節的載入區和執行區設置為與位置無關。如果未使用此選項,則將區標記為絕對地址區。此選項需要 --rw-base的值。如果未指定 --rw-base,則假定為 --rw-base 0。通常每個可寫輸入節必須為可讀寫的位置無關代碼 (RWPI)。
如果選擇了此選項,則鏈接器將:
•檢查是否在任何讀寫執行區的輸入節上設置了 PI 屬性
•檢查節之間的重定位信息的有效性
•生成與表 Region$$Table 中的靜態基址相關的條目。這在復制、解壓縮或初始化區時使用。
5>- - scatter file
使用 file 中包含的分散加載描述來創建映像內存映射。該描述提供映像中各個區和節的分組和布局的詳細信息。
- - scatter 選項不能與任意內存映射選項:- - partial、- - ro-base、- - rw-base、- - ropi、- - rwpi、- - rosplit 或- - split 結合使用,也不能與 --reloc 或 --startup 結合使用。
Not:如果你使用了該選項,你必須自己實現堆和棧初始化函數__user_initial_stackheap()函數.
6>- - split :將包含 RO 和 RW 輸出節的缺省載入區分成以下載入區:
• 一個包含 RO 輸出節的區。缺省的加載地址是 0x8000,但可以使用 --ro-base 選項指定其他地址。
• 一個包含 RW 和 ZI 輸出節的區。使用 --rw-base 選項可指定加
載地址。此選項需要 --rw-base 的值。如果未指定 --rw-base,則假定為 --rw-base 0。
Note: 兩個區都是根區。
7>rosplit: 將缺省 RO 載入區分為兩個 RO 輸出節,一個用于 RO-CODE,另一個
用于 RO-DATA。
8>- - fpic 可用于鏈接位置無關代碼 (PIC),即使用 /fpic 限定符編譯的代碼。
只有在代碼使用 System V 共享庫時才執行相對尋址。
Note:
如果使用了 --shared 但未使用 --fpic,則鏈接器將輸出一個可降級錯誤。
控制調試信息
這些選項控制映像中的調試信息
1- - debug
- - [no_]debug 使用 --debug 在輸出文件中包括調試信息。調試信息包括調試輸入節以及符號和字符串表。這是缺省設置。使用 --no_debug 從輸出文件中排除調試信息。 ELF 映像將變小,但不能在源代碼級別對其進行調試。鏈接器放棄在輸入對象和庫成員中找到的任何調試輸入節,并且不包括映像中的符號和字符串表。僅在載入到調試器時對映像的大小有影響。不影響下載到目標的任何最終二進制映像的大小。如果創建部分鏈接對象,而不是映像,則鏈接器放棄在輸入對象中找到的調試輸入節,但在部分鏈接對象中生成符號和字符串表。
Note:
如果需要 fromelf --fieldoffsets 步驟,則不要使用 --no_debug。如果生成的映像沒有調試信息,則 fromelf 無法:
•將映像轉換為其他文件格式
•生成有意義的反匯編列表。
2. - - datacompressor on|off
缺省情況下,將會啟用 RW 數據壓縮以便最大程度地減小 ROM 大小。使用 --datacompressor off 可關閉 RW 數據壓縮。
3- - datacompressor list|id
可用于為 RW 數據壓縮指定提供的算法之一:
• 使用 --datacompressor list 可獲取可供鏈接器使用的數據壓縮器的列表。
• 如果未指定數據壓縮算法,則鏈接器將自動選擇一種最合適的算法。通常不必覆蓋此選擇。如果要覆蓋鏈接器,請使用 --datacompressor id 指定數據壓縮算法。指定壓縮器后,便會將解壓縮器添加至代碼區。如果最終映像沒有壓縮的數據,則不添加解壓縮器。
4. - - edit file-list
(1)可用于指定控制文件,其中包含用于編輯輸出二進制中的符號表的命令。您可以在控制文件中指定命令來:
• 隱藏全局符號。
使用此選項可隱藏目標文件中的特定全局符號。隱藏符號不是公共可見的。
• 重命名全局符號。
使用此選項可解決符號命名沖突。
(2)如果指定多個控制文件,可以使用以下語法之一:
armlink --edit file1 --edit file2 --edit file3
armlink --edit file1,file2,file3
Note:
不要在逗號和文件名之間留有空格。
5 - -entry location
(1)指定映像的唯一初始入口點。一個映像可包含多個入口點,但使用此選項指定的初始入口點存儲在可執行文件頭中,以供加載程序使用。此選項在命令行中只能使用一次。加載映像時,ARM RealView Debugger使用此入口地址來初始化程序計數器 (PC)。
(2)初始入口點必須滿足以下條件:
•映像入口點必須在執行區內
•執行區必須是非重疊的,而且必須是根執行區(加載地址 ==執行地址)。
使用以下一項替換 location:
(1)entry_address
一個數值,例如:- - entry 0x0
(2)symbol 將映像入口點指定為 symbol 的地址,
例如:- - entry reset_handler
(3)offset+object(section)
將映像入口點指定為特定 object 的 section 中的 offset,
例如:
- - entry 8+startup.o(startupseg)
在 --entry 的自變量中不能包含空格。匹配輸入節和對象名時不區分大小寫。可以使用以下簡化表示法:
•如果 offset 為零,則使用 object(section)。
•如果只有一個輸入節,則使用 object。如果 object 中有多個輸入節,則 armlink 將生成一則錯誤消息。
Note:
如果映像的入口地址在 Thumb 狀態下,則地址的最低有效位必須設置為 1。如果指定了符號,則鏈接器會自動完成此操作。例如,如果入口代碼在 Thumb 狀態下從地址 0x8000 開始,則必須使用 --entry 0x8001。
6 - -first section-id
將選定的輸入節放到其執行區中的第一個節。例如:可以將包含向量表的節放在映像中的第一個節。使用以下一項替換section-id:
1>symbol 選擇定義 symbol 的節。 由于只能有一個節放置為第一個節,因此不能指定有多個定義的符號。 例如:- - first reset
2>object(section)
從object 中選擇 section.在 object 和后面的左括號之間不能有空格。 例如:- - first init.o(init)
3>object
選擇 object 中的單個輸入節。 使用此短格式時,如果有多個輸入節,則 armlink 會生成一則錯誤消息。 例如:- - first init.o
Note:
1.使用分散加載時,在分散加載描述文件中使用 +FIRST代替
2.兩個不同的節,不能一起放到同一個執行區中的首位。因此,該選項只能出現一次。
7. - -last section-id
(1) 將選定的輸入節放置為其執行區中的最后一個節。例如,可以強制將包含校驗和的輸入節放置為 RW 節中的最后一個節。
(2)使用以下一項替換 section-id:
Ø symbol :選擇定義 symbol 的節。 由于只能有一個節放置為最后一個節,因此不能指定有多個定義的符號。
例如:- - last checksum
Ø object(section):從 object 中選擇 section。 在 object 和后面的左括號之間不能有空格。
例如:- - last checksum.o(check)
Ø object: 選擇 object 中的單個輸入節.如果 object 中有多個輸入節,則 armlink 將生成一則錯誤消息。
Note:
1.使用分散加載時,在分散加載描述文件中使用+LAST代替
2.兩個不同的節,不能一起放到同一個執行區中的末位。因此,該選項只能出現一次。
8 - - remove
--remove (RO/RW/ZI/DBG)
(1)使能從映像中刪除未使用的輸入節。
(2) 如果輸入節包含映像入口點(image entry point),或者被已使用節引用,則認為它是已使用節。
Note:
當使用—remove時,要避免不小心刪除reset code或異常處理。可以使用—keep option來識別異常處理段或使用ENTRY 指令來標記他們作為入口點。
(3)可以使用一些段的屬性來更精確的控制那些未使用的節被刪除。可以使用一個或多個限定詞。
RO: 去除所有類型為RO的未使用的節
RW: 去除所有類型為RW的未使用的節
ZI: 去除所有類型為ZI的未使用的節
DBG: 去除所有類型為DEBUG的未使用的節
這些限定詞沒有任何順序,但是必須用括號括起來使用,使用‘/’來分隔他們。
(4)默認是 –remove (RO/RW/ZI/DBG)
(5)如果沒有指定限定詞 --remove,則所有未使用的節都被刪除等價于 –remove(RO/RW/ZI/DBG).
9 - -no_remove
在調試時使用 --no_remove 可在最終映像中保留所有輸入節(即使它們是未使用的)。
10 - -startup symbol
(1)該選項使能鏈接器可以使用帶有不同startup符號的C庫。如果鏈接器發現了main()的定義但是沒有發現對這個符號的引用或定義,則將這個引用加到symbol。默認情況下,這個符號是__main.
11 - -cppinit symbol
項使鏈接器可以使用帶有不同初始化符號的備選 C++ 庫。 缺省情況下,symbol 設置為:__cpp_initialize__aeabi_
12 --fini symbol
指定用于為最終化代碼定義入口點的符號名。當動態鏈接器卸載可執行文件或共享對象時,將執行此代碼。
13 -- init symbol
指定用于定義初始化代碼的符號名。當動態鏈接器加載可執行文件或共享對象時,將執行此代碼。
14 --pad num
(1) 可用于設置填充字節的值。
(2) 鏈接器將此值賦給插入載入區或執行區的所有填充字節。
(3)num 是一個整數,可以用十六進制格式賦值。 例如,將 num 設置為0xFF 可能會有助于縮短 ROM 編程時間。 如果 num 大于 0xFF,則填充字節將設置為 (char)num。
Note:
填充只能插入:
• 載入區中。 在載入區之間沒有填充。
• 固定執行區之間(除了強制對齊之外)。 填充不能插入已達到最大長度的載入區,除非其頂部有固定的執行區。
• 節之間,以確保它們遵循對齊約束。
15 - - soname name
指定共享對象運行時名稱,該名稱由鏈接到此共享對象的任何對象用作相關性名稱。此相關性存儲在鏈接器生成的可執行文件中。
16 - - dynamiclinker name
指定用于在運行時加載和重定位文件的動態鏈接器。與共享對象鏈接時,動態鏈接器使用存儲在可執行文件中的相關性信息來標識要加載的文件。 如果在 ARM Linux 平臺上工作,則鏈接器假定缺省動態鏈接器為 /lib/ld-linux.so.2。
17 - - keep section-id
(1)指定刪除未使用節時不能刪除的輸入節
(2)section-id自變量的所有形式都可以包含 * 和 ? 通配符。 可以在命令行中指定多個 --keep 選項。
(3)使用以下一項替換 section-id:
Ø symbol :指定在刪除未使用節時保留定義 symbol 的輸入節。 如果symbol 存在多個定義,則 armlink 將生成一則錯誤消息。
例如,可以使用 --keep int_handler。
要保留定義以 _handler 結尾的符號的所有節,可以使用- - keep *_handler。
Ø object(section)
指定在刪除未使用節時保留 object 中的 section。
例如,要保留 vectors.o 對象的 vect 節,請使用:- - keep vectors.o(vect)
要保留 vectors.o 對象中節名稱的前三個字母是 vec 的所有節,請使用:- - keep vectors.o(vec*)
Ø object:
指定在刪除未使用節時保留 object 中的單個輸入節。 如果使用此短格式,但 object 中有多個輸入節,則 armlink將生成一則錯誤消息。
例如,您可能使用 --keep dspdata.o。
要保留名稱以 dsp 開頭的每個對象中的單個輸入節,請使用 --keep dsp*.o。
18. - - [no_]locals
(1)使用 --locals 可指示鏈接器在生成可執行映像時將局部符號添加到輸出符號表中。 這是缺省設置。
(2)使用 --no_locals 可指示鏈接器不將局部符號添加到輸出符號表中。如果要減小輸出符號表的大小,則這是非常有用的優化。
產生內存相關信息:
這些選項控制如何提取和表述關于映像的信息
1.—callgraph:
1>創建函數的靜態調用圖。 這與生成的映像保存在同一目錄中。 調用圖將為映像中的所有函數提供定義和參考信息。
Note:
如果鏈接器要計算函數堆棧的使用情況,則在匯編程序文件中定義的任意函數必須具有合適的 PROC/ENDP 和 FRAME PUSH/POP 指令。
2>對于每個函數 func,鏈接器列出以下內容:
· 編譯函數的處理器狀態(ARM 或 Thumb)
· 調用 func 的函數集合
· func 調用的函數集合
· 映像中使用 func 地址的次數
3>此外,調用圖將標識以下函數:
• 通過交互操作膠合代碼調用的函數
• 在映像外定義的函數
• 允許保持未定義狀態的函數(弱引用)。
4>靜態調用圖還提供有關堆棧的使用信息。 其中列出:
• 每個函數使用的堆棧幀的大小
• 在所有調用序列(即所有非循環函數調用鏈)中,函數使用的堆棧的最大大小。
5>如果有循環,或者鏈接器在調用鏈中檢測到不帶有堆棧大小信息的函數,則將 + Unknown 添加至堆棧使用情況中。 將會添加一條原因以指示堆棧使用情況未知的原因。
6>如果沒有函數調試幀信息,鏈接器將報告缺少堆棧幀信息。
7>對于間接函數,鏈接器不能可靠地確定哪個函數發出了間接調用。這可能會影響為調用鏈計算最大堆棧用量的方式。
8>在匯編語言代碼中使用幀指令可描述代碼使用堆棧的情況。 這些指令確保向調試器提供調試幀信息,以執行堆棧展開或配置報告。
2.—feedback file
1>生成反饋文件,在下次編譯文件時提示編譯器有未使用的函數。
2>下次編譯文件時,使用編譯器選項 --feedback file 指定要使用的反饋文件。 未使用函數放置在各自所在的節中,以便鏈接器可能在未來進行刪除。
3.—info topics
1>輸出關于指定主題的信息,其中 topics 是由逗號分隔的主題關鍵字列表。 主題關鍵字可以是以下之一:
· common: 列出從映像中刪除的所有公共節。 使用此選項相當于- - info common,totals。
· debug:列出因使用--remove 而從映像中刪除的所有被拒絕的輸入調試節。 使用此選項相當于 --info debug,totals。
· inline: 列出由鏈接器內聯的所有函數以及內聯的總數
· sizes: 列出映像中每個輸入對象和庫成員的代碼和數據(RO 數據、RW 數據、ZI 數據和調試數據)大小。 使用此選項相當于 --info sizes,totals。
· tailreorder: 列出因為使用 --tailreorder 而移動到其目標上方的所有尾調用節
· totals: 列出輸入對象和庫的代碼和數據(RO 數據、RW 數據、ZI數據和調試數據)的總大小。
· veneers: 列出鏈接器生成的膠合代碼。
· unused: 列出因使用 --remove 而從映像中刪除的所有未使用節.
· Exceptions: 提供異常表生成和優化的信息
2>- - info sizes,totals 的輸出始終在輸入對象和庫的總大小中包含填充值。
3>如果使用 RW 數據壓縮(缺省設置),或已使用 --datacompressor id選項指定了壓縮器,則 --info sizes,totals 的輸出將在 Grand Totals下方包括一個條目,反映映像的真實大小。
Note:
列中的關鍵字之間不允許有空格。
4. - - map 創建映像映射。 映射包含映像中每個載入區、執行區和輸入節(包括鏈接器生成的輸入節)的地址和大小。
5.—symbols:列出鏈接步驟中使用的每個局部符號和全局符號以及相應的值。
Note:
這不包括映射符號。 使用 --list_mapping_symbols 可在輸出中包括映射符號。
6. list_mapping_symbols
在 --symbols 生成的輸出中包括映射符號。
例如:
$a ARM 代碼
$t Thumb 代碼
$d 數據。
映射符號用于標記 ARM 代碼、Thumb 代碼和數據之間的轉換。
7. - - symdefs file:
1>從輸出映像創建包含全局符號定義的文件。
2>缺省情況下,所有全局符號都寫入到 symdefs 文件中。 如果名為file 的 symdefs 文件已經存在,則鏈接器將其輸出限制為此文件中已列出的符號。
Note:
如果不希望出現此行為,請確保在鏈接步驟之前刪除任何現有的symdefs 文件。
3>如果指定的 file 不帶路徑信息,則鏈接器將在寫入輸出映像的目錄中搜索它。 如果未找到該文件,則在該目錄中創建它。
4>在與其他映像鏈接時,可以將符號定義文件用作輸入。
8. - -xref :
列出輸入節之間的所有交叉引用
9. - -xrefdbg:
列出輸入調試節之間的所有交叉引用。
10. - - xref{from|to} object(section)
列出交叉引用:
• 從 object 中的輸入 section 到其他輸入節
• 從其他輸入節到 object 中的輸入 section。
如果想知道來自/指向特定輸入節的引用,則使用 --xref 鏈接器選項生成的列表子集會很有用。可以多次使用此選項,列出來自/指向多個輸入節的引用。
控制鏈接其診斷消息
這些選項控制鏈接器發出診斷消息的方式
1. - -diag_style arm|ide
更改警告和錯誤消息的格式。- - diag_style arm 為缺省值,- - diag_style gnu 與由 gcc 報告的格式相匹配,而 --diag_style ide 與由 Microsoft Visual Studio 報告的格式相匹配。
2.- -diag_suppress taglist
1>禁用所有具有指定標簽的診斷消息。
2>此選項需要以逗號分隔的診斷消息編號列表,用于指定要禁止顯示的消息。例如,要禁止顯示編號為 L6314W 和 L6305W 的警告消息,使用以下命令:
armlink --diag_suppress L6314,L6305 ...
3.- -diag_warning taglist
設置具有指定標簽的診斷消息,使其作為警告消息顯示,例如,在希望降級錯誤消息的情況下。
此選項需要以逗號分隔的診斷消息編號列表,用于指定要降級的消息。
4.- -errors file:
1>將診斷消息從標準錯誤流重定向到 file。
2>指定的文件在鏈接階段開始時創建。如果已存在同名的文件,則清除它。如果指定 file 時不帶路徑信息,則將在當前目錄中創建該文件。
5. - -list file
1>將 --info、- - map、- - symbols、--verbose、- - xref、- - xreffrom 和- - xrefto 命令的輸出中的診斷消息重定向到 file。
2>輸出診斷消息時創建指定的文件。 如果已存在同名的文件,則覆蓋它。不過,如果不輸出診斷消息,則不創建文件。這種情況下,任何現有的同名文件的內容將保持不變。如果指定的 file 不帶路徑信息,則將在輸出目錄(即寫入輸出映像的目錄)中創建該文件。
6. - -verbose:
1>輸出關于鏈接操作的詳細信息,包括所包含的對象和從中提取對象的庫。因為此輸出通常很長,所以可能需要將此命令與 --list file命令結合使用,將信息重定向到 file。
7. - -via file
使用以下選項可以指定包含附加鏈接器命令行參數的 via 文件:
- - via file 從 file 中讀取輸入文件名和鏈接器選項的詳細列表。
可以在鏈接器命令行中輸入多個 --via 選項。 --via 選項也可以包括
在 via 文件中。