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]

取代現有的 files,如果它們不存在,則將它們插入到 archive 的末尾。abTu 修飾符適用於此操作。如果未指定任何 files,則不會修改封存檔。

t[v] .. option:: t [vO]

列印目錄表。在沒有任何修飾符的情況下,此操作只會將成員的名稱列印到標準輸出流。使用 v 修飾符,llvm-ar 也會列印檔案類型 (B=位元碼,S=符號表,空白=常規檔案)、權限模式、所有者和群組 (在擷取 files 時會忽略,並在新增大小時設定為佔位符值) 以及日期。使用 O 修飾符,顯示成員偏移量。如果指定了任何 files,則僅列出這些檔案。如果未指定任何 files,則會列印整個封存檔的目錄表。

V

--version 選項同義。

x [oP]

archive 成員擷取回檔案。o 修飾符適用於此操作。此操作從封存檔中檢索指示的 files,並將它們寫回作業系統的檔案系統。如果未指定任何 files,則會擷取整個封存檔。

修飾符 (操作特定)

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

a

在插入或移動成員檔案時,此選項指定新檔案的目的地為 relpos 成員之後。如果找不到 relpos,則檔案會放置在 archive 的末尾。relpos 無法在沒有 abi 的情況下使用。

b

在插入或移動成員檔案時,此選項指定新檔案的目的地為 relpos 成員之前。如果找不到 relpos,則檔案會放置在 archive 的末尾。relpos 無法在沒有 abi 的情況下使用。此修飾符與 i 修飾符相同。

i

b 選項同義。

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

在列印 filesarchive 目錄表時,此修飾符指示 llvm-ar 在輸出中包含其他資訊。

修飾符 (通用)

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

c

對於 r (取代) 和 q (快速更新) 操作,如果 archive 不存在,llvm-ar 將始終建立它。通常,llvm-ar 將列印警告訊息,指示正在建立 archive。使用此修飾符會關閉該警告。

D

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

P

比對成員名稱時,使用完整路徑而不僅僅是檔案名稱。當操作由另一個封存工具產生的 archive 時,這可能很有用,因為有些封存工具允許使用路徑作為成員名稱。這是精簡封存檔的預設行為。

s

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

S

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

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

CREATE archive

開始建立具有指定名稱的常規封存檔。後續命令將對此 archive 執行操作。

CREATETHIN archive

開始建立具有指定名稱的精簡封存檔。後續命令將對此 archive 執行操作。

ADDLIB archive

archive 的內容附加到目前的封存檔。

ADDMOD <file>

<file> 附加到目前的封存檔。

DELETE <file>

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

SAVE

將目前的封存檔寫入到先前 CREATE/CREATETHIN 命令中指定的路徑。

END