llvm-ar命令详解

概要

llvm-ar [-]{dmpqrtx}[Rabfikou] [relpos] [count] [files…]

描述

llvm-ar命令是类似于常见Unix工具ar。它将多个文件一起归档到一个文件中。这样做的目的是通过LLVM bitcode生成可以链接到LLVM程序的归档库。但是,存档可以包含任何类型的文件。默认情况下, llvm-ar生成一个符号表,可以使链接更快,因为连接时只需要查询符号表,而不是存档的每个单独文件成员。

llvm-ar命令可以用来读取 SVR4,GNU和BSD风格的存档文件。但是,现在它只能以GNU格式编写。如果SVR4或BSD样式存档与r(替换)或q(快速更新)操作一起使用,则存档将以GNU格式重建。

llvm-ar与之前版本的ar实现的不同之处:

  • 符号表:

    由于llvm-ar支持bitcode文件。它创建的符号表是GNU格式,包括native和bitcode文件。

  • 长的路径名

    目前llvm-ar可以读取GNU和BSD长文件名,但只能写GNU格式的档案。

选项

llvm-ar的选项和其他的ar实现完成兼容,但是有一些修饰符是其他ar实现没有的。llvm-ar的选项指定要对归档执行的单个基本操作,该操作的各种修饰符,归档文件的名称以及可选的文件名列表。这些选项用于确定llvm-ar应如何处理存档文件。

操作和修改器将在以下部分中介绍。最小的选项集是至少一个运算符和存档的名称。通常,归档文件以.a后缀结尾,但这不是必需的。继存档名称来自列表文件指示存档的特定成员进行操作。如果未指定files选项,则通常表示“none”或“all”成员,具体取决于操作。

操作 说明
d 从存档中删除文件。没有修饰符适用于此操作。files选项指定哪些成员应该从档案中移除。如果指定文件未出现在存档中,则不会出错。如果没有指定files选项,档案不被修改。
m[abi] 将文件从存档中的一个位置移动到另一个位置。a,b,i修饰符适用于这种操作。指定的文件将被移动到由修饰符给出的位置。如果未使用修饰符,则文件将移动到存档的末尾。如果没有文件被指定,档案不被修改。
p 将文件打印到标准输出。此操作只是打印指定的文件到标准输出。如果没有文件被指定,整个存档被打印。打印bitcode文件是不明智的,因为它们可能会混淆您的终端设置。该操作从未修改存档。
q 快速将文件附加到存档的末尾。 此操作可快速将指定文件添加到存档,而无需检查应首先删除的重复项。如果没有文件被指定,档案不被修改。由于llvm-ar构造归档文件的方式,q操作是否比r操作更快是不确定的。
r[abu] 替换或插入文件成员。a,b,u修饰符适用于这种操作。此操作将替换现有 文件,或者如果它们不存在则将其插入存档的末尾。如果没有文件被指定,档案不被修改。
t[v] 打印目录。如果没有任何修饰符,此操作只会将成员的名称打印到标准输出。使用v修饰符, llvm-ar还会打印出文件类型(B = bitcode,S =符号表,空白=常规文件),权限模式,所有者和组,大小和日期。如果指定了任何文件,则列表仅适用于那些文件。如果没有文件的规定,对整个归档内容表格打印出来。
x[oP] 将存档成员提取回文件。该o,P修改适用于该操作。此操作从存档中检索指示的文件,并将它们写回操作系统的文件系统。如果没有文件被指定,整个存档提取物。
修饰符(特定操作的) 说明
a 插入或移动成员文件时,此选项将新文件的目标指定为在relpos成员之后。如果未找到relpos,则文件将放置在存档的末尾。
b 插入或移动成员文件时,此选项指定新文件的目标位于relpos成员之前。如果未找到relpos,则文件将放置在存档的末尾。此修饰符与i修饰符相同。
i b
o 提取文件时,此选项将导致llvm-ar保留其写入的文件的原始修改时间。
u 替换存档中的现有文件时,仅替换具有时间戳的文件,而不是存档中成员的时间戳。
修饰符(通用) 说明
c 对于所有操作,如果存档不存在,llvm-ar将始终创建存档。通常,llvm-ar将打印一条警告消息,指示正在创建存档。使用此修饰符会关闭该警告。
s 此修饰符请求将归档索引(或符号表)添加到归档中。这是默认的操作模式。符号表将包含归档中所有bitcode文件定义的所有外部可见函数和全局变量。
S 此修饰符与s修饰符相反。它指示llvm-ar不构建符号表。如果同时使用s和S,则以选项中出现的最后一个修饰符为准。
v 显示详细的操作信息

标准

llvm-ar工具的目标是提供一个 POSIX兼容的ar的功能的超集,llvm-ar可以SVR4和BSD4.4格式的归档文件。如果将f修饰符赋予xr操作,则llvm-ar将编写SVR4兼容的归档。如果没有此修饰符, llvm-ar将写入BSD4.4兼容的归档,这些归档在标题之后立即具有长名称,并使用标题中的名称“#1 / ddd”表示。

退出

如果llvm-ar成功,它将以0退出。使用错误导致退出代码为1;硬(通常是文件系统)错误导致退出代码为2;杂项或未知错误导致退出代码为3。