Linux ar命令用于建立或修改备存文件,或是从备存文件中抽取文件。
ar可让您集合许多文件,成为单一的备存文件。在备存文件中,所有成员文件皆保有原来的属性与权限。
#语法
ar[-dmpqrtx][cfosSuvV][a<成员文件>][b<成员文件>][i<成员文件>][备存文件][成员文件]
参数:
必要参数:
-d 删除备存文件中的成员文件。
-m 变更成员文件在备存文件中的次序。
-p 显示备存文件中的成员文件内容。
-q 将文件附加在备存文件末端。
-r 将文件插入备存文件中。
-t 显示备存文件中所包含的文件。
-x 自备存文件中取出成员文件。
选项参数:
a<成员文件> 将文件插入备存文件中指定的成员文件之后。
b<成员文件> 将文件插入备存文件中指定的成员文件之前。
c 建立备存文件。
f 为避免过长的文件名不兼容于其他系统的ar指令指令,因此可利用此参数,截掉要放入备存文件中过长的成员文件名称。
i<成员文件> 将文件插入备存文件中指定的成员文件之前。
o 保留备存文件中文件的日期。
s 若备存文件中包含了对象模式,可利用此参数建立备存文件的符号表。
S 不产生符号表。
u 只将日期较新文件插入备存文件中。
v 程序执行时显示详细的信息。
V 显示版本信息。
ar -r
打包文件
$ ar rv two.bak *.c //打包以.c结尾的文件
ar: 正在创建 two.bak
a - a.c
a - b.c
a - c.c
a - d.c
ar -t
显示打包文件的内容
$ ar -t two.bak
a.c
b.c
c.c
d.c
ar -d
删除打包文件的成员文件
$ ar -d two.bak a.c b.c c.c
$ ar t two.bak
d.c
ar -p
显示打包文件的成员文件内容
$ ar -p two.bak d.c
执行ar
命令遇到的问题
$ ar -x libJDPay.a
ar: libJDPay.a is a fat file (use libtool(1) or lipo(1) and ar(1) on it)
ar: libJDPay.a: Inappropriate file type or format
解决
是因为该.a文件包含了多个cpu架构,比如armv7,armv7s,arm64等,此时可以用如下命令
首先需要判断当前.a文件包含了 那些CPU架构,使用指令:
$ otool -vf libJDPay.a
Fat headers
fat_magic FAT_MAGIC
nfat_arch 4
architecture armv7
cputype CPU_TYPE_ARM
cpusubtype CPU_SUBTYPE_ARM_V7
capabilities 0x0
offset 88
size 944560
align 2^2 (4)
architecture i386
cputype CPU_TYPE_I386
cpusubtype CPU_SUBTYPE_I386_ALL
capabilities 0x0
offset 944648
size 953768
align 2^2 (4)
architecture x86_64
cputype CPU_TYPE_X86_64
cpusubtype CPU_SUBTYPE_X86_64_ALL
capabilities 0x0
offset 3028992
size 1001856
align 2^3 (8)
architecture arm64
cputype CPU_TYPE_ARM64
cpusubtype CPU_SUBTYPE_ARM64_ALL
capabilities 0x0
offset 1898416
size 1130576
align 2^3 (8)
Archive : libJDPay.a
然后此时使用指令分别进行如下操作:
$ lipo libname. a -thin armv7 -output libname_armv7.a
$ lipo libname. a -thin arm64 -output libname_armv64.a
ar -t
查看静态库中文件目录
$ ar -t libJDPay_arm64.a
__.SYMDEF
JDPAuthSDK.o
JDPAuthLoading.o
CB_DES.o
JDPAuthURICode.o
JDPADeviceUtils.o
JDPAuthWebViewController.o
JDPBase64.o
JDPAOpenUDID.o
JDPayModule.o
NSBundle+JDPaySubBundle.o
JDPayURLRequestManager.o
JDPayFoundationModule.o
JDPayFoundation_vers.o
JDPayBizURLRequestManager.o
JDPURICode.o
JDPCJSONSerializer.o
JDPCJSONDeserializer.o
CDataScanner_Extensions.o
JDPRequestConst.o
JDPCDataScanner.o
JDPCJSONScanner.o
JDPReachability.o
KBJSONSerializing.o
JDPayNetworkModule.o
NSDictionary_JSONExtensions.o
JDPayNetwork_vers.o
ar -x
解压.a 文件
$ ar -x libname_armv7.a
看到文件目录下有很多.o的静态库文件,这时将不同架构下的.o文件合并
网友评论