duplicate symbol ...
iOS开发过程中我们经常用到很多三方库,图片上的报错你是不是也遇到过呢?(当然这个错也可能是项目中多次导入了某个类,本质和库里面包含相同类是一样的)
问题很简单就是duplicate symbol的问题。图片中的两个库都包含了MBProgressHUD,所以报错了。
废话不多说直接上解决办法:找到项目的Build Settings ->搜索 other linker :填写-force_load 以及冲突库的路径
解决方法找到了,下面来说说为啥?
other linker flags可以设置的三种:
ObjC
一般这个参数足够解决前面提到的问题,这个flag告诉链接器把库中定义的Objective-C类和Category都加载进来。这样编译之后的app会变大,因为加载了很多不必要的文件而导致可执行文件变大。但是如果静态库中有类和category的话只有加入这个flag才行,但是Objc也不是万能的,当静态库中只有分类而没有类的时候,Objc就失效了,这就需要使用-all_load或者-force_load了。
-all_load
-all_load会强制链接器把目标文件都加载进来,即使没有objc代码。但是这个参数也有一个弊端,那就是你使用了不止一个静态库文件,那么你很有可能会遇到ld: duplicate symbol错误,因为不同的库文件里面可能会有相同的目标文件 这里会有两种方法解决 1:用命令行就行拆包. 2:就是用下面的这个参数
-force_load
这个flag所做的事情跟-all_load其实是一样的,只是-force_load需要指定要进行全部加载的库文件的路径,这样的话,你就只是完全加载了一个库文件,不影响其余库文件的按需加载 .