Undefined symbols for architecture i386:

先说一下检查xcode报错的经验,一定要仔细看报错,如果是文件报错路径是哪里,配置错误是什么配置。xcode默认显示缩略报错,要点开右上角的报错详情
这里写图片描述

Undefined symbols for architecture i386: 这是一个常见报错,通常的原因是忘记引用一些文件、lib、framework等。

贴一个例子
Undefined symbols for architecture i386:_第1张图片

这里缺少的是sqlite3_bind_blob等方法,这些方法包含在sqlite3.dylib中,因此加入这个库即可解决问题

Undefined symbols for architecture i386:_第2张图片

与之相对的是duplicate报错,意思是有相同的函数定义,它们冲突了

贴一个例子
Undefined symbols for architecture i386:_第3张图片
Undefined symbols for architecture i386:_第4张图片

仔细看报错描述,在两个不同的路径下,有相同的UPPayPlugin文件,所以报错。

这个时候,不同情况有对应的解决方法:

1.简单的文件重复A和B,可以删除掉任意一份
2.两个lib文件重复,也可以删除掉任意一份
3.两个lib中部分文件冲突,A lib包含B lib,这个时候删除B
4.两个lib中部分文件冲突,且均有不同文件,这个时候只能修改lib文件了

特殊情况。有的时候xcode的报错,它并不能直接告诉我们哪里出现了问题,这个时候真的需要靠经验去发现问题。

例如以下报错:
Undefined symbols for architecture i386:_第5张图片

这是我在接入 XY助手 这个渠道的时候遇到的问题。
乍眼一看好像就是少了一些头文件,可是这些文件是包含在lib库中的,这下头疼了。
仔细核对核对了很久demo,发现appdelegate文件的后缀是.mm,而lib文件也恰好是在这个文件中,难道是这个文件后缀的原因?

把appdelegae文件后缀修改为.mm,编译了以下果然不再报错。
这又是为什么呢?应该是xyplatform中引入了c++相关的代码,因此需要设置文件为.mm进行混合编译。如果文件为.m后缀,c++相关代码无法编译,造成了undefined symbol的报错。

你可能感兴趣的:(xcode,undefined,DUPLICATE,symbols)