在开发中,有时候会出现undefined symbols for architecture x86_64的情况,发生如下错误有两种情况:
1、你工程中需要的库文件没有引用,在工程的Targets的Build Phases中Link Binary With Libraries去引用缺失的库。
2、你自己写的类没有加入到Compile Sources,引用你的类.m文件进去就好。
网上看到很多说需要将Build Active Architectures Only设置为NO,于是了解了一下关于工程中的指令集。
我是这么理解的,苹果的这些设备随着软硬件的升级,不同的设备对应这不同的iOS指令集。我们在开发完毕后,编译的过程中根据不同的指令集编译出不同的二进制文件,对应在不同的设备来运行这个程序。Build Active Architectures Only的意思就是仅仅根据当前运行设备的指令集编译当前设备的二进制文件运行在这个设备上,所以就不难理解,在debug情况下我们设置为YES,这样编译速度肯定快写,方便我们调试。在release情况下,我们设置为NO,这样发布的产品才能正常在支持的不同设备架构下运行。
简单整理下,不同iPhone设备的指令集:
armv6
iPhone、iPhone 3G
iPod 1G、iPod 2G
armv7
iPhone 3GS、iPhone 4
iPod 3G、iPod 4G、iPod 5G
iPad、iPad 2、iPad 3、iPad Mini
armv7s
iPhone 5、iPhone 5C
iPad 4
arm64
iPhone 5S iPhone 6 iPhone 6Plus
iPad Air, Retina iPad Mini
Xcode4.5之后就弃用了armv6,现在应该也不会有支持3Gs以前的应用了吧,所以我们的工程TARGETS->Build Setting->Architecture->Valid Architecture一般设置为 arm64 armv7 armv7s。但是在这个要提醒,有的时候我们的应用是支持某一个框架,需要引入这个框架,但是有可能你下载的三方不支持这个框架,就会报错。所以看清楚下载支持和你工程引入框架一致的三方。以上就是我的理解和感悟,欢迎指正!