llvm-ar - LLVM 封存工具¶
概要¶
llvm-ar [-]{dmpqrstx}[abcDilLNoOPsSTuUvV] [relpos] [count] archive [files…]
描述¶
llvm-ar 命令類似於常見的 Unix 工具 ar。它將多個檔案(例如物件檔和 LLVM 位元碼檔案)封存到單一的封存庫中,該封存庫可以連結到程式中。但是,封存檔可以包含任何種類的檔案。預設情況下,llvm-ar 會產生符號表,這可以加快連結速度,因為只需要查詢符號表,而無需查詢封存檔的每個個別成員。
llvm-ar 命令可用於讀取 SVR4、GNU、BSD、Big Archive 和 Darwin 格式的封存檔,以及寫入 GNU、BSD、Big Archive 和 Darwin 風格的封存檔。如果將 SVR4 格式的封存檔與 r
(取代)、d
(刪除)、m
(移動) 或 q
(快速更新) 操作一起使用,則將以 --format
定義的格式重建封存檔。
以下是 llvm-ar 與先前 ar 實作不同的地方
以下選項不支援
[f] - 截斷插入的檔案名稱
以下選項為了相容性而被忽略
–plugin=<string> - 載入外掛程式,以新增對其他檔案格式的支援
[l] - 在 ar 中被忽略
符號表
由於 llvm-ar 支援位元碼檔案,因此它建立的符號表包含原生和位元碼符號。
確定性封存檔
Windows 路徑
在 Windows 上,llvm-ar 以與作業系統相同的大小寫敏感方式處理封存檔案的名稱。在非 Windows 機器上,llvm-ar 不考慮字元大小寫。
選項¶
llvm-ar 操作與其他 ar 實作相容。但是,有一些修飾符 (L
) 在其他 ar 實作中找不到。llvm-ar 的選項指定要在封存檔上執行的單一基本操作、該操作的各種修飾符、封存檔的名稱以及檔案名稱的可選列表。如果未指定 files 選項,則通常表示「無」或「所有」成員,具體取決於操作。選項、操作和修飾符在以下章節中說明。
最少的選項集至少包含一個運算子和封存檔的名稱。
操作¶
- d [NT]¶
從
archive
中刪除檔案。N
和T
修飾符適用於此操作。files 選項指定應從封存檔中移除哪些成員。如果指定的檔案未出現在封存檔中,則不會發生錯誤。如果未指定任何 files,則不會修改封存檔。
- m [abi]¶
將檔案從
archive
中的一個位置移動到另一個位置。a
、b
和i
修飾符適用於此操作。files 將全部移動到修飾符給定的位置。如果未使用修飾符,則檔案將移動到封存檔的末尾。如果未指定任何 files,則不會修改封存檔。
- p [v]¶
將 files 列印到標準輸出流。如果未指定任何 files,則會列印整個
archive
。使用v
修飾符,llvm-ar 也會列印正在輸出的檔案名稱。不建議列印二進位檔案,因為它們可能會混淆您的終端機設定。p
操作永遠不會修改封存檔。
t[v] .. option:: t [vO]
修飾符 (操作特定)¶
以下修飾符特定於某些操作。請參閱「操作」章節,以確定哪些修飾符適用於哪些操作。
- a¶
在插入或移動成員檔案時,此選項指定新檔案的目的地為 relpos 成員之後。如果找不到 relpos,則檔案會放置在
archive
的末尾。relpos 無法在沒有a
、b
或i
的情況下使用。
- b¶
在插入或移動成員檔案時,此選項指定新檔案的目的地為 relpos 成員之前。如果找不到 relpos,則檔案會放置在
archive
的末尾。relpos 無法在沒有a
、b
或i
的情況下使用。此修飾符與i
修飾符相同。
- L¶
在快速附加
archive
時,改為快速附加其成員。這是 gnu-ar 中找不到的 llvm-ar 功能。
- N¶
當擷取或刪除與另一個成員共用名稱的成員時,count 參數允許您提供一個正整數,以選擇給定名稱的實例,「1」表示第一個實例。如果未指定
N
,則將選擇該名稱的第一個成員。如果未提供 count,則操作失敗。count 不能是
- o¶
擷取檔案時,請使用
archive
中顯示的任何 files 的修改時間。預設情況下,從封存檔擷取的 files 使用擷取時間。
- O¶
顯示封存檔內部的成員偏移量。
- T¶
別名為
--thin
。在許多 ar 實作中,T
具有不同的含義,如 X/Open System 介面所指定。
- v¶
在列印 files 或
archive
目錄表時,此修飾符指示 llvm-ar 在輸出中包含其他資訊。
修飾符 (通用)¶
以下修飾符可以應用於任何操作。
- c¶
對於
r
(取代) 和q
(快速更新) 操作,如果archive
不存在,llvm-ar 將始終建立它。通常,llvm-ar 將列印警告訊息,指示正在建立archive
。使用此修飾符會關閉該警告。
- D¶
使用零作為時間戳記和 UID/GID。這是預設設定。
- P¶
比對成員名稱時,使用完整路徑而不僅僅是檔案名稱。當操作由另一個封存工具產生的
archive
時,這可能很有用,因為有些封存工具允許使用路徑作為成員名稱。這是精簡封存檔的預設行為。
- s¶
此修飾符要求將封存索引 (或符號表) 新增到
archive
,就像使用 ranlib 一樣。符號表將包含封存檔中所有位元碼檔案定義的所有外部可見函數和全域變數。預設情況下,llvm-ar 會在封存檔中產生符號表。這也可以用作操作。
- u¶
僅使用具有較新時間戳記的 files 更新
archive
成員。
- U¶
使用實際的時間戳記和 UID/GID。
其他¶
- --format=<type>¶
此選項允許選擇預設、gnu、darwin、bsd 或 coff
<type>
。當使用預設<type>
建立archive
時,:program:llvm-ar
將嘗試從輸入檔案中推斷它,如果無法推斷,則回退到預設工具鏈目標。
- -h, --help¶
列印命令列選項及其含義的摘要。
- -M¶
此選項允許透過標準輸入流讀取 MRI 腳本。沒有其他選項與此選項相容。
- --output=<dir>¶
指定應將封存檔成員擷取到其中的目錄。預設情況下,使用目前的工作目錄。
- --rsp-quoting=<type>¶
- 此 選項選擇回應檔案的 ``<type>`` 引用樣式, 可以是¶
- ``posix`` 或 ``windows``。 在 Windows 上的預設值為 ``windows``, 否則 預設值為¶
- default is ``posix``。¶
- --thin¶
在建立或修改封存檔時,此選項指定
archive
將是精簡的。預設情況下,封存檔不會建立為精簡封存檔,並且在修改精簡封存檔時,它將轉換為常規封存檔。
- --version¶
顯示 llvm-ar 可執行檔的版本。
- -X mode¶
指定 llvm-ar 將識別的物件檔類型。模式必須是以下其中之一
- 32
32
- 64
僅處理 32 位元物件檔。
- 32_64
64
- 僅處理 64 位元物件檔。
32_64
處理 32 位元和 64 位元物件檔。
- any
處理所有物件檔。
預設為處理 32 位元物件檔 (忽略 64 位元物件)。模式也可以使用 OBJECT_MODE 環境變數設定。例如,OBJECT_MODE=64 會導致 ar 處理任何 64 位元物件並忽略 32 位元物件。-X 旗標會覆寫 OBJECT_MODE 變數。
@<FILE>¶
從回應檔案 <FILE>
讀取命令列選項和命令。
MRI 腳本¶
llvm-ar 理解 MRI 腳本介面的子集,該介面通常由遵循 ar 傳統的封存工具支援。MRI 腳本包含一系列要由封存工具執行的命令。
-M
選項允許透過標準輸入流將 MRI 腳本傳遞給 llvm-ar。
請注意,llvm-ar 在使用 MRI 腳本方面存在已知限制
每個腳本只能建立一個封存檔。
- 無法修改現有的封存檔。
MRI 腳本命令¶
-
每個命令都以命令的名稱開頭,並且必須單獨佔據一行。某些命令具有引數,這些引數必須與名稱以空白字元分隔。MRI 腳本應以
CREATE
或CREATETHIN
命令開頭,並且通常以SAVE
命令結尾。在「*」或「;」之後的任何文字都視為註解。 CREATE archive¶
-
開始建立具有指定名稱的常規封存檔。後續命令將對此
archive
執行操作。 CREATETHIN archive¶
-
開始建立具有指定名稱的精簡封存檔。後續命令將對此
archive
執行操作。 ADDLIB archive¶
-
將
archive
的內容附加到目前的封存檔。 ADDMOD <file>¶
-
將
<file>
附加到目前的封存檔。 DELETE <file>¶
-
刪除目前封存檔中檔案名稱 (不包括目錄組件) 與
<file>
相符的成員。 SAVE¶
將目前的封存檔寫入到先前 CREATE
/CREATETHIN
命令中指定的路徑。
END¶