llvm-ar - LLVM 归档器

摘要

llvm-ar [-]{dmpqrstx}[abcDilLNoOPsSTuUvV] [relpos] [count] archive [files…]

描述

llvm-ar 命令类似于常见的 Unix 实用程序 ar。它将多个文件(例如对象文件和 LLVM 位码文件)归档到一个单一的归档库中,该库可以链接到程序中。但是,归档库可以包含任何类型的文件。默认情况下,llvm-ar 生成一个符号表,使链接速度更快,因为只需要查询符号表,而不需要查询归档库中的每个单个文件成员。

llvm-ar 命令可以用来读取 SVR4、GNU、BSD、大型归档和 Darwin 格式的归档文件,以及写入 GNU、BSD、大型归档和 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 的选项指定要对归档文件执行的单个基本操作、该操作的各种修饰符、归档文件的名称以及可选的文件名列表。如果未指定文件选项,则通常表示“无”或“所有”成员,具体取决于操作。选项、操作和修饰符在下面的部分中进行了解释。

最少的选项集至少包含一个操作符和归档文件的名称。

操作

d [NT]

archive 中删除文件。NT 修饰符适用于此操作。文件选项指定要从归档文件中删除哪些成员。如果指定的文件未出现在归档文件中,则不会出错。如果未指定文件,则归档文件不会被修改。

m [abi]

将文件从 archive 中的一个位置移动到另一个位置。abi 修饰符适用于此操作。所有文件都将移动到修饰符给定的位置。如果未使用修饰符,则文件将移动到归档文件的末尾。如果未指定文件,则归档文件不会被修改。

p [v]

文件打印到标准输出流。如果未指定文件,则打印整个 archive。使用 v 修饰符,llvm-ar 还会打印正在输出的文件的名称。打印二进制文件是不明智的,因为它们可能会混淆终端设置。p 操作永远不会修改归档文件。

q [LT]

快速将文件追加到 archive 的末尾,而不删除重复项。如果未指定文件,则归档文件不会被修改。将一个归档文件追加到另一个归档文件时的行为取决于是否使用了 LT 修饰符

  • 将常规归档文件追加到常规归档文件中将追加归档文件。如果指定了 L 修饰符,则将追加成员。

  • 将常规归档文件追加到精简归档文件中需要 T 修饰符,并将追加归档文件。L 修饰符不受支持。

  • 将精简归档文件追加到常规归档文件中将追加归档文件。如果指定了 L 修饰符,则将追加成员。

  • 将精简归档文件追加到精简归档文件中将始终快速追加其成员。

r [abTu]

替换现有的文件,或者如果它们不存在,则将它们插入到 archive 的末尾。abTu 修饰符适用于此操作。如果未指定文件,则归档文件不会被修改。

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

打印目录。在没有任何修饰符的情况下,此操作仅将成员的名称打印到标准输出流。使用 v 修饰符,llvm-ar 还会打印文件类型(B=位码、S=符号表、空白=常规文件)、权限模式、所有者和组(在提取文件时被忽略,在添加大小时设置为占位符值)以及日期。使用 O 修饰符,显示成员偏移量。如果指定了任何文件,则列表仅针对这些文件。如果未指定文件,则打印整个归档文件的目录。

V

--version 选项的同义词。

x [oP]

archive成员提取回文件。 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

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

修饰符(通用)

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

c

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

D

对时间戳和UID/GID使用零。默认情况下设置此值。

P

匹配成员名称时使用完整路径,而不仅仅是文件名。这在操作由其他存档器生成的archive时非常有用,因为某些存档器允许路径作为成员名称。这是瘦存档的默认行为。

s

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

S

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

u

仅更新时间戳较新的文件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
``posix`` 也可以是 ``windows``。 Windows 默认值 ``windows``, 否则 默认值
``posix``。
--thin

创建或修改存档时,此选项指定archive将是瘦存档。默认情况下,存档不会创建为瘦存档,并且在修改瘦存档时,它将转换为常规存档。

--version

显示llvm-ar可执行文件的版本。

-X mode

指定llvm-ar将识别的目标文件类型。模式必须是以下之一

32

仅处理32位对象文件。

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 理解遵循 ar 传统的文件归档程序常用的 MRI 脚本接口的一个子集。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

结束 MRI 脚本(可选)。

退出状态

如果 llvm-ar 成功,它将以 0 退出。否则,如果发生错误,它将以非零值退出。