一、合并.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 Path中libLibA.a的路径。
2、指定Header Search Paths中LibA.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 Paths中FrameworkA.framework的路径。
注意:只有静态库这种方式有效。