1.引入头文件错误.出现.m的文件.
2.other linker flags -ObjC 与 -all_load切换尝试 或 -force_load(需要手动引入文件地址)
-ObjC:加了这个参数后,链接器就会把静态库中所有的Objective-C类和分类都加载到最后的可执行文件中
-all_load:会让链接器把所有找到的目标文件都加载到可执行文件中,但是千万不要随便使用这个参数!假如你使用了不止一个静态库文件,然后又使用了这个参数,那么你很有可能会遇到ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件,所以建议在遇到-ObjC失效的情况下使用-force_load参数。
-force_load:所做的事情跟-all_load其实是一样的,但是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载
3.检查Architectures 配置
4.在Other linker flags 添加不用oc代码的标示 可以过滤掉冲突的部分(写的标示 我删掉之后找不到了 --)
5.引入.a静态库出现冲突的话如下图所示,就打开静态库 删除
5.1 最舒服的手动删除 适合 比较多的.0文件冲突
创建一个文件夹 把出错的.a文件拉进去 下面开始 使用ar指令处理
第一步:查看报信息
lipo -info libx.a
例如 输出结果:
Architectures in the fat file: libGeTuiSdk-1.4.3-noidfa.a are: armv7 i386 x86_64 arm64
如果提示fat file,那么代表这个包是支持多平台的,例如armv7,armv7s,i386等,这需要我们逐一做解包重打包操作。
第二步:创建文件夹
由于到合并多个包,所以需要先分好类后,再进行此操作
mkdir armv7
第三步:提取armv7平台的包
在第一步中,可以看到支持的各个平台。
lipo libx.a -thin armv7 -output armv7/libgt-armv7.a
第四步:解压.a文件
可以使用命令先进行查看.a包中的文件列表
ar -t armv7/libgt-armv7.a
解压.a包(内部都是.o文件)
cd armv7
ar xv libgt-armv7.a
第五步:删除冲突文件
针对minizip来说,我在个推包中,删除如下几个文件(可以手动在文件夹里删除)
rm zip.o
rm unzip.o
rm mztools.o
rm mztools.o
第六步:重新打包
删除后,重新把.o文件,打成.a包。(把里面原来的.a文件删除)
cd ..
ar crv libgt-armv7.a *.o
第七步:根据支持平台类型,重复以上的操作,直到全部平台都操作一遍。
第八步:合并.a包,并替换文件
把所有的处理好的所有 libgt-armv7.a libgt-arm64.a libgt-i386.a libgt-x86_64.a 放到一个文件夹里 然后
cd ..
lipo -create libgt-armv7.a libgt-arm64.a libgt-i386.a libgt-x86_64.a -output libGeTuiSdk-1.4.3-noidfa-nominizip.a
5.2如果比较少,可以尝试下边图片的操作--