llvm-ar - LLVM 归档器¶
概要¶
llvm-ar [-]{dmpqrstx}[abcDilLNoOPsSTuUvV] [relpos] [count] archive [files…]
描述¶
llvm-ar 命令类似于常见的 Unix 实用程序 ar。它将多个文件(例如对象文件和 LLVM bitcode 文件)归档到一个可以链接到程序中的单个归档库中。但是,归档文件可以包含任何类型的文件。默认情况下,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 支持 bitcode 文件,因此它创建的符号表既包含本机符号也包含 bitcode 符号。
确定性归档
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
的末尾。在没有a
、b
或i
的情况下,不能使用 relpos。
- b¶
在插入或移动成员文件时,此选项指定新文件的目标位置在 relpos 成员之前。如果找不到 relpos,则文件将放置在
archive
的末尾。在没有a
、b
或i
的情况下,不能使用 relpos。此修饰符与i
修饰符相同。
- L¶
当快速追加
archive
时,改为快速追加其成员。这是 llvm-ar 的一项功能,在 gnu-ar 中找不到。
- N¶
当提取或删除与其名称与其他成员共享的成员时,count 参数允许您提供一个正整数,以选择给定名称的实例,“1”表示第一个实例。如果未指定
N
,则将选择该名称的第一个成员。如果未提供 count,则操作失败。*count* 不能是
- o¶
提取文件时,使用
archive
中出现的任何 files 的修改时间。默认情况下,从归档文件中提取的 files 使用提取时间。
- O¶
显示归档文件内的成员偏移量。
- T¶
--thin
的别名。在许多 ar 实现中,T
具有不同的含义,如 X/Open 系统接口所指定的那样。
- v¶
当打印 files 或
archive
目录表时,此修饰符指示 llvm-ar 在输出中包含其他信息。
修饰符(通用)¶
以下修饰符可以应用于任何操作。
- c¶
对于
r
(替换)和q
(快速更新)操作,如果archive
不存在,llvm-ar 将始终创建它。通常,llvm-ar 将打印一条警告消息,指示正在创建archive
。使用此修饰符将关闭该警告。
- D¶
使用零作为时间戳和 UID/GID。这是默认设置。
- P¶
匹配成员名称时使用完整路径,而不仅仅是文件名。当操作由另一个归档器生成的
archive
时,这可能很有用,因为有些归档器允许将路径作为成员名称。这是精简归档文件的默认行为。
- s¶
此修饰符请求向
archive
添加归档索引(或符号表),就像使用 ranlib 一样。符号表将包含归档文件中所有 bitcode 文件定义的所有外部可见的函数和全局变量。默认情况下,llvm-ar 在归档文件中生成符号表。这也可以用作操作。
- u¶
仅使用具有更新时间戳的 files 更新
archive
成员。
- U¶
使用实际的时间戳和 UID/GID。
其他¶
- --format=<type>¶
此选项允许选择 default、gnu、darwin、bsd 或 coff
<type>
。当使用默认<type>
创建archive
时,:program:llvm-ar
将尝试从输入文件推断它,如果无法推断,则回退到默认工具链目标。
- -h, --help¶
打印命令行选项及其含义的摘要。
- -M¶
此选项允许通过标准输入流读取 MRI 脚本。没有其他选项与此选项兼容。
- --output=<dir>¶
指定应将归档文件成员提取到哪个目录。默认情况下,使用当前工作目录。
- --rsp-quoting=<type>¶
- 此 选项 选择 响应 文件的 引用样式 ``<type>``, 可以是¶
- ``posix`` 或 ``windows``。在 Windows 上的默认值为 ``windows``, 否则 默认值为¶
- 默认值 为 ``posix``。¶
- --thin¶
创建或修改归档文件时,此选项指定
archive
将是精简的。默认情况下,归档文件不会创建为精简归档文件,并且在修改精简归档文件时,它将转换为常规归档文件。
- --version¶
显示 llvm-ar 可执行文件的版本。
- -X mode¶
指定 llvm-ar 将识别的对象文件类型。mode 必须是以下之一
- 32
32
- 64
仅处理 32 位对象文件。
- 32_64
64
- 仅处理 64 位对象文件。
32_64
处理 32 位和 64 位对象文件。
- any
处理所有对象文件。
默认设置为处理 32 位对象文件(忽略 64 位对象)。mode 也可以使用 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¶