美文网首页
iOS两个.a文件合并成一个.a文件

iOS两个.a文件合并成一个.a文件

作者: biyuhuaping | 来源:发表于2018-04-10 17:15 被阅读74次

    在移动开发过程中,如果一个工程需要接入很多第三方sdk ,那么一个工程可能有好多个.a库。这么多个.a文件,能不能合成一个库,而又能同时实现多个功能呢?

    这里,就用支付宝sdk和微信sdk用作试验。
    支付宝.a库:libcrypto.a 、 libssl.a
    微信.a库 : libWeChatSDK.a

    1. 打开终端;

    2. 从工程拖出上述三个.a文件,拖拽到桌面上,此时,它们的路径分别是:

    /Users/ssiwo02/Desktop/libcrypto.a
    /Users/ssiwo02/Desktop/libssl.a
    /Users/ssiwo02/Desktop/libWeChatSDK.a
    

    3. 使用终端,查看上述三个.a库所支持的构架
    (i386,x86_64,armv7,armv7s,arm64,至于这些构架分别代表什么,可以看博主关于iOS 架构的博文,或自行百度)
    在终端输入命令:

     lipo -info /Users/ssiwo02/Desktop/libcrypto.a
    

    显示: Architectures in the fat file: /Users/ssiwo02/Desktop/libcrypto.a are: armv7 armv7s i386 x86_64 arm64

    同理 分别查看libssl.a 、 libWeChatSDK.a 支持的架构信息。

    4. 使用终端,分别分离出上述三个.a文件单独支持的架构版本
    比如上述libcrypto.a支持armv7 armv7s i386 x86_64 arm64,那么就需要分离出单独支持armv7、 armv7s 、i386 x86_64 、arm64的libcrypto.a
    在终端输入命:

    lipo /Users/ssiwo02/Desktop/libcrypto.a -thin armv7 -output /Users/ssiwo02/Desktop/libcrypto_armv7.a
    

    面上就出现一个单独支持armv7架构的.a库,
    命名为 libcrypto_armv7.a
    同理分别分理libssl.a 、 libWeChatSDK.a 所支持的全部架构版本。

    5. 使用终端,分离出.a库的目标文件(.o)

    在进行分离之前,因为.a库分离出来的目标文件.o文件很多,所以,最好在桌面上建立五个文件夹,命名为A,B,C,D,E,F 分别用来存储分离出来的支持armv7、 armv7s、 i386 x86_64、 arm64的.o文件。并进入当前的文件路径

    在终端输入命令:

    cd /Users/ssiwo02/Desktop/A/
    ar -x /Users/ssiwo02/Desktop/libcrypto_armv7.a
    
    cd /Users/ssiwo02/Desktop/B/  
    ar -x /Users/ssiwo02/Desktop/libcrypto_armv7s.a
    
    ……
    

    注意:一定将支持同个架构的.o文件,放在同一个目标文件中。
    这步操作比较多,容易出错。

    6. 对支持同个架构的.o文件,进行合并成静态库。
    在终端输入命令:

    libtool -static -o /Users/ssiwo02/Desktop/A/libXXX-armv7.a *.o  
    

    执行完毕,就会在/Users/ssiwo02/Desktop/A/路径中,生成一个libXXX-armv7.a 的文件。

    同理分别对B,C,D,E,F的文件夹中的.o文件进行合并,并且命名。

    如果不出错,就会得到5个.a文件:
    libXXX-armv7.a ,
    libXXX-armv7s.a ,
    libXXX-i386.a ,
    libXXX-x86_64.a ,
    libXXX-arm64.a

    7. 合成支持全部架构的通用静态库
    在终端输入命令:

    lipo -create 
    /Users/ssiwo02/Desktop/A/libXXX-armv7.a 
    /Users/ssiwo02/Desktop/B/libXXX-armv7s.a 
    /Users/ssiwo02/Desktop/C/libXXX-i386.a 
    /Users/ssiwo02/Desktop/D/libXXX-x86_64.a 
    /Users/ssiwo02/Desktop/E/libXXX- arm64.a 
    -output 
    /Users/ssiwo02/Desktop/libXXX.a
    

    执行完毕,就会在桌面上生成一个命名为libXXX.a,这个libXXX.a就是我们所需要的.a库。

    版权声明:本文为博主原创文章,未经博主允许不得转载。
    原文地址:https://blog.csdn.net/qq_26968709/article/details/51164104

    相关文章

      网友评论

          本文标题:iOS两个.a文件合并成一个.a文件

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