美文网首页
合并静态库以及iOS静态库.a文件转.m文件

合并静态库以及iOS静态库.a文件转.m文件

作者: ZhiMa_Maker | 来源:发表于2020-10-09 10:43 被阅读0次

    静态库基本知识

    Cocoa平台下 有 framework 和 .a 类型,接下来我们主要分析.a类型的静态库

    静态库根据包含的架构类型可以分fat和thin,一般有armv7、armv7s、arm64、arm64e等类型。
    
    fat  包含多个架构
    
    thin 包含单个架构
    
    1、查看静态库架构信息
    lipo -info xxx.a
    
    
    2、如果是多架构类型,分离静态库架构

    lipo -extract_family armv7 -output xxx.a xxxSDK.a
    warmming:小心这样写是导致错误发生,这种写法针对fat文件是无法成功的。

    如果出现以下信息,说明是包含多个架构的静态库,需要分离

    Architectures in the fat file:  xxx.a are: armv7 armv7s
    
    

    下一步:分离.a 包含的多架构

    lipo xxx.a -thin armv7 -output xxx_armv7.a
    lipo xxx.a -thin armv7s -output xxx_armv7s.a
    
    

    而对于i386则不用上述那么麻烦,直接用第一句-extract_family指令就能分离出只含i386版本的库:

    lipo -extract_family i386 -output xxx_i386.a xxx_i386.a
    
    
    3.分离出目标文件(.o)

    进行实质上的合并。xcode里提示duplicate symbol都是说.o与.o冲突。注意,只有非fat file,也就是只含有单种版本的lib库才能分离出.o文件

    ar -x ../xxx_armv7.a
    ar -x ../xxx_armv7s.a
    ar -x ../xxx_i386.a
    

    这一步最好是在lib*_final.a的同级目录下新建一个文件夹,专门用来接收解压出来的.o文件。同种版本(如armv7)的都解压到这个文件夹中,相同的.o文件他会自己覆盖掉。

    4.从.o文件中合并成静态库
    libtool -static -o ../xxx_armv7.a  *.o
    
    
    5.合并成最终的通用静态库
    lipo -create -output test1.a test2-i386.a test3-armv7.a test4-armv7s.a
    
    

    从.a静态库文件导出.m 文件

    准备一个静态库.a文件,比如我们之前制作的 xxx.a,放在桌面的test目录里。

    1、打开终端:

    2、cd 到 libVideoPlayerLib.a 所在的文件夹test下

    cd ~/Desktop/test/
    

    3、查看 libVideoPlayerLib.a 包含几种架构 arch 。 (file 命令)

    file xxx.a
    
    lipo -info xxx.a
    

    4、分离出一种架构的.a。(lipo **.a -thin armv7 -output armv7.a)

    lipo xxx.a -thin armv7 -output xxx_armv7.a
    

    5、抽离.a文件的object文件.o。(ar -x armv7.a)

    ar -x xxx_armv7.a
    

    6、将.o 转换为 .m。(nm ****.o > ****.m)

    nm xxx.o > xxx.m
    

    到这里关于静态库.a 相关的知识就结束了,如果有遇到新的问题,下面再做补充!

    相关文章

      网友评论

          本文标题:合并静态库以及iOS静态库.a文件转.m文件

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