先说一下检查xcode报错的经验,一定要仔细看报错,如果是文件报错路径是哪里,配置错误是什么配置。xcode默认显示缩略报错,要点开右上角的报错详情
Undefined symbols for architecture i386: 这是一个常见报错,通常的原因是忘记引用一些文件、lib、framework等。
贴一个例子
这里缺少的是sqlite3_bind_blob等方法,这些方法包含在sqlite3.dylib中,因此加入这个库即可解决问题
与之相对的是duplicate报错,意思是有相同的函数定义,它们冲突了
贴一个例子
仔细看报错描述,在两个不同的路径下,有相同的UPPayPlugin文件,所以报错。
这个时候,不同情况有对应的解决方法:
1.简单的文件重复A和B,可以删除掉任意一份
2.两个lib文件重复,也可以删除掉任意一份
3.两个lib中部分文件冲突,A lib包含B lib,这个时候删除B
4.两个lib中部分文件冲突,且均有不同文件,这个时候只能修改lib文件了
特殊情况。有的时候xcode的报错,它并不能直接告诉我们哪里出现了问题,这个时候真的需要靠经验去发现问题。
例如以下报错:
这是我在接入 XY助手 这个渠道的时候遇到的问题。
乍眼一看好像就是少了一些头文件,可是这些文件是包含在lib库中的,这下头疼了。
仔细核对核对了很久demo,发现appdelegate文件的后缀是.mm,而lib文件也恰好是在这个文件中,难道是这个文件后缀的原因?
把appdelegae文件后缀修改为.mm,编译了以下果然不再报错。
这又是为什么呢?应该是xyplatform中引入了c++相关的代码,因此需要设置文件为.mm进行混合编译。如果文件为.m后缀,c++相关代码无法编译,造成了undefined symbol的报错。