iOS系统解决Duplicate Symbol编译错误。
出现Duplicate Symbol编译错误,原因都是项目中包含了重名的类,在编译时生成了多个重名的.o文件,解决的方法也比较简单,直接删除其中一个,或者改名就可以了。但是,如果是在两个第三方的.a文件中出现上述情况,则比较复杂,需要对其中一个进行删减重名文件,步骤如下:
查看.a文件支持的ARM
在命令行中用以下命令查看:
|
|
可以看到结果:
|
|
这里的fat file说明.a文件是支持多个ARM的。
分解成支持单ARM的.a文件
对于fat file,我们需要将其分解成不同ARM的.a文件,命令如下:
|
|
完成后,用lipo -info命令验证一下是否分解成功:
|
|
结果为:
|
|
说明分解成功。如果出现依然是fat file的情况,需要对其进行进一步裁剪,命令如下:
|
|
这里,还需要注意的是,arm64比较特殊,需要直接使用裁剪命令生成,如果直接用extract_family命令,生成的.a会出现下述现象:
|
|
完成后,可以看到,在该文件夹下,已经分解成了对应的.a文件。
从.a文件中分解出所有的.o文件
先新建一个名称为armv7的文件夹,以便存放所有的.o文件,然后执行命令:
|
|
可以看到文件夹中存放了所有的.o文件,从中找出重名的.o文件,将其删除。完成后,重新打包成.a文件:
|
|
新生成的.a文件,就是已经删除了重名.o文件的.a文件了。对上一步上成的.a文件重复上述操作,可以得到所有的新生成的.a文件。
合并所有裁剪后的.a文件
命令如下:
|
|
将合并后的.a文件加到项目中编译,Duplicate Symbol编译错误解决。