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 支援位元碼檔案,因此它建立的符號表包含原生符號和位元碼符號。

確定性封存檔

根據預設,llvm-ar 一律使用零作為時間戳記和 UID/GID,以確定性模式寫入封存檔。這相當於預設啟用 D 修飾符。如果您想維持與其他 ar 實作的相容性,可以傳遞 U 修飾符來寫入實際的時間戳記和 UID/GID。

Windows 路徑

在 Windows 上,llvm-ar 會以與作業系統相同的區分大小寫方式處理封存*檔案*的名稱。在非 Windows 機器上,llvm-ar 不會區分大小寫。

選項

llvm-ar 的操作與其他 ar 實作相容。但是,有一些修飾詞(L)在其他 ar 實作中找不到。llvm-ar 的選項指定要在封存上執行的單一基本操作、該操作的各種修飾詞、封存檔案的名稱,以及檔案名稱的選用清單。如果未指定 files 選項,則通常表示「無」或「所有」成員,具體取決於操作。選項、操作和修飾詞將在以下各節中說明。

最少選項集至少包含一個運算子和封存的名稱。

操作

d [NT]

archive 中刪除檔案。NT 修飾詞適用於此操作。files 選項指定應從封存中移除哪些成員。如果指定的檔案未出現在封存中,則不會發生錯誤。如果未指定 files,則不會修改封存。

m [abi]

將檔案從 archive 中的一個位置移動到另一個位置。abi 修飾詞適用於此操作。files 都將移動到修飾詞指定的位置。如果未使用修飾詞,則檔案將移動到封存的末尾。如果未指定 files,則不會修改封存。

p [v]

files 列印到標準輸出流。如果未指定 files,則會列印整個 archive。使用 v 修飾詞時,llvm-ar 也會列印出正在輸出的檔案名稱。建議不要列印二進制檔案,因為它們可能會混淆您的終端機設定。p 操作永遠不會修改封存。

q [LT]

快速將檔案附加到 archive 的末尾,而不移除重複項。如果未指定 files,則不會修改封存。將一個封存附加到另一個封存時的行為取決於是否使用了 LT 修飾詞

  • 將一個常規歸檔附加到另一個常規歸檔將會附加歸檔檔案。如果指定了 L 修飾符,則將附加成員。

  • 將常規歸檔附加到精簡歸檔需要 T 修飾符,並且將附加歸檔檔案。L 修飾符不受支援。

  • 將精簡歸檔附加到常規歸檔將會附加歸檔檔案。如果指定了 L 修飾符,則將附加成員。

  • 將精簡歸檔附加到精簡歸檔將始終快速附加其成員。

r [abTu]

替換現有的*檔案*,或者如果它們不存在,則將它們插入到 歸檔 的末尾。abTu 修飾符適用於此操作。如果沒有指定*檔案*,則不會修改歸檔。

t[v] .. 選項:: t [vO]

列印目錄表。如果沒有任何修飾符,此操作只會將成員的名稱列印到標準輸出串流。使用 v 修飾符時,llvm-ar 還會列印檔案類型(B=位元碼、S=符號表、空白=常規檔案)、權限模式、擁有者和群組(在提取*檔案*時會被忽略,並在新增時設定為預留位置值)、大小和日期。使用 O 修飾符時,會顯示成員偏移量。如果有指定任何*檔案*,則清單只會顯示這些檔案。如果沒有指定*檔案*,則會列印整個歸檔的目錄表。

V

--version 選項的同義詞。

x [oP]

歸檔 成員提取回檔案。o 修飾符適用於此操作。此操作會從歸檔中擷取指定的*檔案*,並將它們寫回作業系統的檔案系統。如果沒有指定*檔案*,則會提取整個歸檔。

修飾符(特定於操作)

以下修飾符特定於某些操作。請參閱「操作」章節以確定哪些修飾符適用於哪些操作。

a

在插入或移動成員文件時,此選項指定新文件放置在 relpos 成員之後。如果找不到 relpos,則將文件放置在 archive 的末尾。relpos 不能在沒有 abi 的情況下使用。

b

在插入或移動成員文件時,此選項指定新文件放置在 relpos 成員之前。如果找不到 relpos,則將文件放置在 archive 的末尾。relpos 不能在沒有 abi 的情況下使用。此修飾符與 i 修飾符相同。

i

b 選項的同義詞。

L

快速附加 archive 時,改為快速附加其成員。這是 llvm-ar 中 gnu-ar 沒有的功能。

N

提取或刪除與另一個成員同名的成員時,count 參數允許您提供一個正整數來選擇指定名稱的實例,其中「1」表示第一個實例。如果未指定 N,則會選擇該名稱的第一個成員。如果未提供 count,則操作失敗。*count* 不能

o

提取文件時,使用任何 文件archive 中出現的修改時間。默認情況下,從歸檔中提取的 文件 使用提取時間。

O

顯示歸檔內的成員偏移量。

T

--thin 的別名。在許多 ar 實作中,T 具有不同的含義,如 X/Open 系統介面所指定。

v

在列印 檔案歸檔 檔案的目錄時,此修飾符會指示 llvm-ar 在輸出中包含額外資訊。

修飾符(通用)

以下修飾符可以應用於任何操作。

c

對於 r(替換)和 q(快速更新)操作,如果 歸檔 不存在,llvm-ar 總是會建立它。通常,llvm-ar 會列印一條警告訊息,指出正在建立 歸檔。使用此修飾符會關閉該警告。

D

對時間戳記和 UID/GID 使用零。這是預設設定。

P

在匹配成員名稱時使用完整路徑,而不僅僅是檔名。這在操作由其他歸檔器生成的 歸檔 時非常有用,因為有些歸檔器允許路徑作為成員名稱。這是精簡歸檔的預設行為。

s

此修飾符要求將歸檔索引(或符號表)添加到 歸檔 中,就像使用 ranlib 一樣。符號表將包含歸檔中所有位元碼檔案定義的所有外部可見函數和全域變數。預設情況下,llvm-ar 會在歸檔中生成符號表。這也可以用作操作。

S

此修飾符與 s 修飾符相反。它指示 llvm-ar 不要建立符號表。如果同時使用 sS,則選項中最後出現的修飾符將生效。

u

僅使用具有更新時間戳記的 檔案 更新 歸檔 成員。

U

使用實際的時間戳記和 UID/GID。

其他

--format=<type>

此選項允許選擇預設、gnu、darwin、bsd 或 coff 的 <type>。使用預設的 <type> 建立 歸檔 時,:program:llvm-ar 會嘗試從輸入檔案推斷,如果無法推斷,則會回到預設的工具鏈目標。

-h, --help

印出命令列選項及其含義的摘要。

-M

此選項允許透過標準輸入流讀取 MRI 腳本。沒有其他選項與此選項相容。

--output=<dir>

指定要將歸檔成員解壓縮到的目錄。預設情況下,使用目前的工作目錄。

--rsp-quoting=<type>
此選項為回應檔案選擇 ``<type>`` 引號樣式,可以是 ``posix``
``windows``。 Windows 上的預設值為 ``windows`` 否則
預設值為 ``posix``。
--thin

建立或修改歸檔時,此選項指定 歸檔 將會是精簡的。預設情況下,不會將歸檔建立為精簡歸檔,並且在修改精簡歸檔時,它會被轉換為一般歸檔。

--version

顯示 llvm-ar 可執行檔的版本。

-X mode

指定 llvm-ar 將辨識的物件檔案類型。模式必須是以下其中一種

32

僅處理 32 位元物件檔案。

64

僅處理 64 位元物件檔案。

32_64

同時處理 32 位元和 64 位元物件檔案。

任何

處理所有目標文件。

預設為處理 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 腳本應該以 CREATECREATETHIN 命令開頭,並且通常以 SAVE 命令結尾。「*」或「;」之後的任何文字都將被視為註解。

CREATE 封裝檔

以指定的名稱開始建立常規封裝檔。後續的命令將作用於此 封裝檔

CREATETHIN 封裝檔

以指定的名稱開始建立精簡封裝檔。後續的命令將作用於此 封裝檔

ADDLIB 封裝檔

封裝檔 的內容附加到目前的封裝檔。

ADDMOD <檔案>

<檔案> 附加到目前的封裝檔。

DELETE <檔案>

刪除目前封裝檔中,檔名(不包括目錄組件)與 <檔案> 相符的成員。

SAVE

將目前的歸檔寫入先前 CREATE/CREATETHIN 命令指定的路径。

END

結束 MRI 腳本(可選)。

退出狀態

如果 llvm-ar 成功,它將以 0 退出。否則,如果發生錯誤,它將以非零值退出。