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 符号。

确定性归档

默认情况下,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=bitcode,S=符号表,空白=常规文件)、权限模式、所有者和组(在提取 files 时被忽略,并在添加大小时设置为占位符值)以及日期。使用 O 修饰符,显示成员偏移量。如果指定了任何 files,则列表仅针对这些文件。如果未指定 files,则打印整个归档文件的目录表。

V

--version 选项同义。

x [oP]

archive 成员提取回文件。o 修饰符适用于此操作。此操作从归档文件中检索指示的 files,并将它们写回操作系统的文件系统。如果未指定 files,则提取整个归档文件。

修饰符(操作特定)

以下修饰符特定于某些操作。请参阅“操作”部分以确定哪些修饰符适用于哪些操作。

a

在插入或移动成员文件时,此选项指定新文件的目标位置在 relpos 成员之后。如果找不到 relpos,则文件将放置在 archive 的末尾。在没有 abi 的情况下,不能使用 relpos

b

在插入或移动成员文件时,此选项指定新文件的目标位置在 relpos 成员之前。如果找不到 relpos,则文件将放置在 archive 的末尾。在没有 abi 的情况下,不能使用 relpos。此修饰符与 i 修饰符相同。

i

b 选项同义。

L

当快速追加 archive 时,改为快速追加其成员。这是 llvm-ar 的一项功能,在 gnu-ar 中找不到。

N

当提取或删除与其名称与其他成员共享的成员时,count 参数允许您提供一个正整数,以选择给定名称的实例,“1”表示第一个实例。如果未指定 N,则将选择该名称的第一个成员。如果未提供 count,则操作失败。*count* 不能是

o

提取文件时,使用 archive 中出现的任何 files 的修改时间。默认情况下,从归档文件中提取的 files 使用提取时间。

O

显示归档文件内的成员偏移量。

T

--thin 的别名。在许多 ar 实现中,T 具有不同的含义,如 X/Open 系统接口所指定的那样。

v

当打印 filesarchive 目录表时,此修饰符指示 llvm-ar 在输出中包含其他信息。

修饰符(通用)

以下修饰符可以应用于任何操作。

c

对于 r(替换)和 q(快速更新)操作,如果 archive 不存在,llvm-ar 将始终创建它。通常,llvm-ar 将打印一条警告消息,指示正在创建 archive。使用此修饰符将关闭该警告。

D

使用零作为时间戳和 UID/GID。这是默认设置。

P

匹配成员名称时使用完整路径,而不仅仅是文件名。当操作由另一个归档器生成的 archive 时,这可能很有用,因为有些归档器允许将路径作为成员名称。这是精简归档文件的默认行为。

s

此修饰符请求向 archive 添加归档索引(或符号表),就像使用 ranlib 一样。符号表将包含归档文件中所有 bitcode 文件定义的所有外部可见的函数和全局变量。默认情况下,llvm-ar 在归档文件中生成符号表。这也可以用作操作。

S

此修饰符与 s 修饰符相反。它指示 llvm-ar 不要构建符号表。如果同时使用 sS,则选项中最后出现的修饰符将生效。

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 脚本应以 CREATECREATETHIN 命令开头,通常以 SAVE 命令结尾。在“*”或“;”之后的任何文本都被视为注释。

CREATE archive

开始创建具有指定名称的常规归档文件。后续命令作用于此 archive

CREATETHIN archive

开始创建具有指定名称的精简归档文件。后续命令作用于此 archive

ADDLIB archive

archive 的内容追加到当前归档文件。

ADDMOD <file>

<file> 追加到当前归档文件。

DELETE <file>

删除当前归档文件中文件名(不包括目录组件)与 <file> 匹配的成员。

SAVE

将当前归档文件写入到先前 CREATE/CREATETHIN 命令中指定的路径。

END