美文网首页
操作静态库命令工具 ar

操作静态库命令工具 ar

作者: 执拗的男孩 | 来源:发表于2019-11-22 17:45 被阅读0次

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文件合并

相关文章

  • 操作静态库命令工具 ar

    Linux ar命令用于建立或修改备存文件,或是从备存文件中抽取文件。ar可让您集合许多文件,成为单一的备存文件。...

  • java集合类的使用

    一、盲点 1、array和arrays区别 arrays是工具类,静态方法。后者能够操作数组[] 比如排序。 Ar...

  • iOS 解压打包静态库命令

    iOS 解压打包静态库命令 lipo http://www.cnblogs.com/tekkaman/archiv...

  • sqlite3常用命令

    目录:一、启动数据库命令二、系统命令三、操作命令 一、启动数据库命令 二、系统命令 三、操作命令 就是一些对数据的...

  • 编译命令

    创建静态库 创建动态库 ar命令 ar压缩目标文件,并对其进行编号和索引,形成静态库。同时也可以解压缩静态库,查看...

  • numpy 基本操作1.0

    生成数组,基本符号操作, numpy工具可用来存储和处理大型矩阵 import numpy as np ar = ...

  • Day17--集合

    集合框架的工具类:Collections Arrays:用户操作数组的工具类。里面都是静态方法。 asList:将...

  • Collection是类

    都是包含静态方法的工具类 Collections类 排序操作 void reverse(List list):反转...

  • Java 19-7 集合工具类

    Collections 为工具类 操作Collection的静态方法对list排序 sort(list); 模拟最...

  • Linux 常用命令三

    gcc ar AR命令可以对一个或者多个目标文件.o进行归档, 形成一个静态库.a文件。 命令格式 ar [-]{...

网友评论

      本文标题:操作静态库命令工具 ar

      本文链接:https://www.haomeiwen.com/subject/soufwctx.html