Mac系统下lipo, ar, nm等工具的使用简介

91 篇文章 3 订阅
42 篇文章 0 订阅

一、简介

目前ios制作对外输出的动态库,静态库越来越方便,伴随而来的问题也也越来越少,本次就打包Framework过程做下记录(不涉及xcodebuild调用过程)

二、简述lipo

lipo源于mac系统要制作兼容powerpc平台和intel平台的程序,lipo 是一个在 Mac OS X 中处理通用程序(Universal Binaries)的工具,主要用于查看,修改Mac OS X 中的通用程序。

(a)查看frameWork支持架构

lipo -info xxx.framework/xxx
输出结果:Architectures in the fat file: xxx.framework/xxx are: i386 x86_64 armv7 arm64

(b)合并framework

lipo -create xxx(i386).framework/xxx xxx(armv7).framework/xxx -output xxx.framework.xxx
说明:通过编译产生的动态库/静态库,均为单一架构支持(模拟器/真机),其中i386和x86_64均为模拟器架构,armv7和arm64为真机架构,通过合并产生的framework才是全架构支持

(c)拆分framework

lipo xxx.framework/xxx -thin i386 xxx.i386
说明:次操作将单独分离出仅支持i386的动态库/静态库文件, x86_64 armv7 arm64可同理分离,可以配合合并操作去除不需要的架构支持,用于动态库/静态库瘦身。

三、简述ar操作

ar是linux提供的维护链接编辑器使用的索引库

1. 要创建一个库,请输入:

      ar -v -q lib.a strlen.o strcpy.o

如果 lib.a 库不存在,则此命令创建它,并将文件 strlen.o 和 strcpy.o 的副本输入其中。如果 lib.a 库存在,则此命令在不检查相同成员的情况下,将新的成员添加到末尾。v 标志设置详细方式,在此方式中 ar 命令在其进行时显示进程报告。

2. 要显示库的目录,请输入:

      ar -v -t lib.a

此命令列出了 lib.a 库的目录,显示类似于 ls -l 命令的输出的长列表。要只列出成员文件名称,则省略 -v 标志。

3. 要替换或添加新成员到库中,请输入:

      ar -v -r lib.a strlen.o strcat.o

此命令替换成员 strlen.o 和 strcat.o。如果 lib.a 如示例 1 中显示的那样创建,则替换 strlen.o 成员。因为不存在名为 strcat.o 的成员,所以它被添加到库的末尾。

 

4. 要指定在何处插入新成员,请输入:

      ar -v -r -b strlen.o lib.a strcmp.o

此命令添加 strcmp.o 文件,并将该新成员置于 strlen.o 成员之前。

 

5. 要更新一个已经更改过的成员,请输入:

      ar -v -r -u lib.a strcpy.o

 此命令替换现有 strcpy.o 成员,但仅当文件 strcpy.o 自从最后一次添加到库后已经修改时才替换它。

6. 要更改库成员的顺序,请输入:

      ar -v -m -a strcmp.o lib.a strcat.o strcpy.o

 此命令将成员 strcat.o 和 strcpy.o 移动到紧跟在 strcmp.o 成员之后的位置。保留 strcat.o 和 strcpy.o 成员的相对顺序。换句话说,如果在移动之前 strcpy.o 成员在 strcat.o 成员之前,那么(移动后)它依旧如此。

7. 要解压缩库成员,请输入:

      ar -v -x lib.a strcat.o strcpy.o

 此命令将成员 strcat.o 和 strcpy.o 分别复制到名为 strcat.o 和 strcpy.o 的文件。

 

8. 要解压缩并重命名一个成员,请输入:

      ar -p lib.a strcpy.o >stringcopy.o

 此命令将成员 strcpy.o 复制到一个名为 stringcopy.o 的文件。

9. 要删除一个成员,请输入:

      ar -v -d lib.a strlen.o

 此命令从 lib.a 库中删除成员 strlen.o。

 

10. 要从多个用 ld 命令创建的共享模块中创建一个压缩文档库,请输入:

      ar -r -v libshr.a shrsub.o shrsub2.o shrsub3.o ...

此命令从名为 shrsub.o、shrsub2.o、shrsub3.o 等等的共享模块中创建名为 libshr.a 的压缩文档库。要编译并链接使用 libshr.a 压缩文档库的 main 程序,请使用以下命令:

    cc -o main main.c -L/u/sharedlib -lshr

main 程序现在是可执行的。main 程序引用的任何符号(包含在libshr.a 压缩文档库中)已经因延迟分辨率而作了标记。-l 标志指定应在 libshr.a 库中搜索这些符号。

11. 要列出 lib.a 的内容(忽略任何 32 位目标文件),请输入:

      ar -X64 -t -v lib.a

12. 要从 lib.a 解压缩所有 32 位的目标文件,请输入:

      ar -X32 -x lib.a

 

13. 要列出 lib.a 中的所有文件,无论是 32 位、64 位或非对象,请输入:

      ar -X32_64 -t -v lib.a

 

四、简述nm操作

nm 命令被用于显示二进制目标文件的符号表

语法

nm(选项)(参数)
举例:
nm View.o>View.m 
nm -A View.o

说明:
选项:[-A:每个符号前显示文件名;-D:显示动态符号;-g:仅显示外部符号;-r:反序显示符号表。]
参数:目标文件,二进制目标文件,通常是库文件和可执行文件


作者:piao152
链接:https://www.jianshu.com/p/e0ef5146bd7a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值