美文网首页iCoder
iOS开发 静态库.a/.framework合并及加载

iOS开发 静态库.a/.framework合并及加载

作者: Leoeoo | 来源:发表于2022-12-29 17:54 被阅读0次

    一、合并.a

    1、同一个静态库不同的架构合并

    我们在开发过程中,可能会碰到把同一个静态库的不同架构进行合并。如:合并armv7架构和x86_64架构;
    如下图

    image.png
    libB文件夹下为arm64架构的libLibB.a
    image.png
    libB-x86文件夹下为x86-64架构的libLibB.a
    image.png
    合并两个.a:
    lipo -create ~/Desktop/111/libB/libLibB.a ~/Desktop/111/libB-x86/libLibB.a -output ~/Desktop/111/libB/libLibB.a
    

    lipo命令使用:https://www.jianshu.com/p/ad4bd1711c62

    2、不同的静态库合并

    当静态库LibA.a里面使用到了静态库LibB.a,但是我们只想把LibA.a对外提供时,可以把LibB.a合并到LibA.a里面。

    1、解析libLibB.a.o文件
    ar -x libLibB.a 
    
    image.png
    2、解析libLibA.a.o文件
    ar -x libLibA.a 
    
    image.png
    3、把LibB.o复制到libA/文件夹下并合并
    image.png
    libtool -static -o libLibA.a *o
    

    此时,libLibA.a中已经包含了libLibB.a中的LibB.o

    4、对外提供libLibA.a即可
    5、针对两个库包含相同的.o,可以ar -x解析出.o文件,然后删除掉其中一个库中的重复.o文件,再通过libtool合并.o即可。

    二、合并.framework

    1、通过ar -x提取.o
    ar -x FrameworkA
    ar -x FrameworkB
    
    image.png
    image.png
    2、复制到A并合并
    image.png
    libtool -static -o FrameworkA *.o
    

    此时FrameworkA.framework中就包含FrameworkB.framework中的内容了。

    三、加载静态库.a/.framework

    一、加载.a

    image.png

    方式一

    通过addFiles添加

    image.png
    此时Xcode会自动在Library Search Path中添加libLibA.a的路径。
    image.png
    Header Search Paths不需要设置的原因是已经把 LibA.h添加到了项目中。如果不把 LibA.h添加到项目中,此时需要指定Header Search Paths路径。

    方式二

    此方式不需要在Xcode中显式显式.a

    1、指定Library Search PathlibLibA.a的路径。
    2、指定Header Search PathsLibA.h的路径。
    3、指定Other Linker Flags中加载libLibA.a
    image.png
    该指令表示加载:libLibA.a:
    加载时会自动在LibA前面加上lib前缀,在LibA后面加上.a后缀
    -l"LibA"
    
    image.png

    更多指令见:

    man ld
    

    此时就可以在代码里面正常调用该库了。

    二、加载.framework

    方式一

    通过addFiles添加
    此时Xcode会自动在 Library Search Path 中添加 libLibA.a 的路径。

    image.png

    方式二

    指定Framework Search PathsFrameworkA.framework的路径。
    注意:只有静态库这种方式有效。

    相关文章

      网友评论

        本文标题:iOS开发 静态库.a/.framework合并及加载

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