前言
作为iOS开发中最常见的问题之一,今天好好来把它拎清一下!
OC基于C语言,是扩充C的面向对象编程语言。有.h和.m文件,.h头文件中是对定义的声明,而.m中则是具体的实现逻辑代码。
常见错误
我们来理解一下:
未能在 x86_64 架构下发现定义的标识符:
OC 类 ZMBLEManager, 在以下文件中被引用:
在ViewController中引用了OC类。
分析下:
1)在ViewController中使用了“ZMBLEManager”,在编译时未报错,说明在.h文件中有“ZMBLEManager”的声明。
2)链接时报错“Undefined symbols”,说明在.M文件中并没有ZMBLEManager的实现。
解决思路
1)去查看对应的.m文件,类的实现是否存在!(一般没人会犯这种错误吧~~~)
2)从外部导入的文件没有加入到特定的target中。
通常此类问题都是导入静态库之后会产生的,那我们就要检查一下导入静态库的姿势是否正确!
1)必须引入头文件对应的.a文件,一定要勾选target。
2)检查Build Phases里的Link Binary With Libraries(如果未勾选target会造成Link Binary With Libraries不包含对应的.a)和Build Settings里的几项Search Path(查看路径是否设置正确)。
3)未包含处理器架构指令集的问题。报错时的提示一般都是“Undefined symbols for architecture x86_64”之类的,而“for architecture x86_64”就是说没有支持x86_64,在Build settings里architecture相关的几项需要配置正确。
相信很多朋友都碰到过这样的情况,使用第三方提供的SDK,在模拟器上无法运行,但是切换到真机就能跑的飞起!!!
这是因为引入的.a文件中包含了对应真机的架构,但没有包含对应的模拟器架构!
如果你想深入了解可以查看iOS 静态库 - 常用操作指令 ,尝试去分解你的静态库,了解内部构造。
如果以上方案都没能解决你的问题,欢迎私信!当然还有可能你的静态库跟.h本来就是不对称的~~~~~
下期预告
iOS 异常处理 - Duplicate Symbols