iOS测试分为模拟器测试和真机测试,处理器分为32位处理器,和64位处理器,
模拟器32位处理器测试需要i386架构,(iphone5,iphone5s以下的模拟器)
模拟器64位处理器测试需要x86_64架构,(iphone6以上的模拟器)
真机32位处理器需要armv7,或者armv7s架构,(iphone4真机/armv7, ipnone5,iphone5s真机/armv7s)
真机64位处理器需要arm64架构。(iphone6,iphone6p以上的真机)
project -> target -> building setting -> Arhitectures 设置
debug属性设置为no的时候,会编译支持所有架构的版本,编译的速度会变慢,设置为yes 的时候,只编译当前的architecture版本,编译速度快。
一般情况下,debug 设置为yes,release为no,这样发行版本能适应不同设备,
Undefined symbols错误的解决方案整理
.h(声明文件)<————>.m(实现文件)
.h<————>.c
.hpp<————>.cpp
1》在源代码中,找不到一个标识符的声明,无论是变量名,类名,或者是方法名,编译的时候会得到
Use of undeclared identifier ‘XXX’错误。
2》在源代码中,如果编译器找到他的声明,却不知道他怎么实现的,或者说目标文件里没有这个实现,则就会出现链接错误。
Undefined symbols for architecture armv7(armv7处理器架构指令集下,符号未定义):
"_XCloseIM", referenced from:
dlib::gui_core_kernel_2_globals::event_handler_thread::~event_handler_thread() in gui_core_kernel_2.o
编译原理,在源码词法分析,语法分析以及编译的整个过程中,会生成符号表,所有标识符都会放到这个表中。 如果链接的时候,找不到具体的实现,就会出现这个错误。可能的原因有:
当源码运行出现这种错,解决办法是target-->build setting-->compile sources as 把混编语言改回objective-c 就可以了
Undefined symbols for architecture armv7:
"_UIApplicationMain", referenced from:
_main in main.o
"_OBJC_CLASS_$_UIResponder", referenced from:
_OBJC_CLASS_$_AppDelegate in AppDelegate.o
"_OBJC_METACLASS_$_UIViewController", referenced from:
_OBJC_METACLASS_$_ViewController in ViewController.o
"_OBJC_CLASS_$_UINavigationController", referenced from:
objc-class-ref in AppDelegate.o
"_OBJC_CLASS_$_UIWindow", referenced from:
objc-class-ref in AppDelegate.o
"_OBJC_CLASS_$_UIScreen", referenced from:
objc-class-ref in AppDelegate.o
"_OBJC_METACLASS_$_UIResponder", referenced from:
_OBJC_METACLASS_$_AppDelegate in AppDelegate.o
"_OBJC_CLASS_$_UIViewController", referenced from:
_OBJC_CLASS_$_ViewController in ViewController.o
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)