iOS关于armv7,armv7s,arm64,i386,x86_64等问题
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’错误。
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
编译原理,在源码词法分析,语法分析以及编译的整个过程中,会生成符号表,所有标识符都会放到这个表中。 如果链接的时候,找不到具体的实现,就会出现这个错误。可能的原因有:
- 引入了需要用到的库的头文件,却没有链接正确的实现库。因为Xcode本身所支持的库是Static Library,即.a的方式,.a的文件里只有实现,使用的时候需要另外引入头文件,那么就有可能把头文件放进来,没有放.a或放入了错误的版本。
- Build Settings或者Build Phases配置有误。检查Build Phases里的Link Binary With Libraries和Build Settings里的几项Search Path。
- 从外部导入的文件没有加入到特定的target中。这个正是我整理这篇日志之前遇到的,将.a、.m、.framework等引入到工程当中,却没有勾选当前Build的target,会出现这个问题,可以选中特定的文件,在右侧边栏中选中target。
- 未包含处理器架构指令集的问题。报错时的提示一般都是“Undefined symbols for architecture armv7”之类的,而“for architecture armv7”就是说没有支持armv7,在Build settings里architecture相关的几项需要配置正确。
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)
iOS关于armv7,armv7s,arm64,i386,x86_64等问题相关推荐
- 关于iOS 编译器 armv7 armv7s arm64 i386 x86_64
armv7 armv7s arm64 是ARM处理器的指令集 i386 x86_64 处理的指令集 对应的设备 arm64:iPhoneX | iphone8 plus|iPhone8| iPhone ...
- iOS关于armv7,armv7s,arm64,i386,x86_64
iOS测试分为模拟器测试和真机测试,处理器分为32位处理器,和64位处理器, 模拟器32位处理器测试需要i386架构,(iphone5,iphone5s以下的模拟器) 模拟器64位处理器测试需要x86 ...
- iOS armv7,armv7s, arm64
目前ios的指令集有以下几种: armv6 iPhone iPhone2 iPhone3G 第一代和第二代iPod Touch armv7 iPhone4 iPhone4S armv7s iPhone ...
- 第26月第22天 iOS瘦身之armv7 armv7s arm64选用 iOS crash
1.iOS瘦身之armv7 armv7s arm64选用 机器对指令集的支持是向下兼容的,因此armv7的指令集是可以运行在iphone5S以上的,只是效率没那么高而已~ 但是由于苹果要求必须支持ar ...
- xcode armv6 armv7 armv7s arm64
眼下ios的指令集有下面几种: armv6 iPhone iPhone2 iPhone3G 第一代和第二代iPod Touch armv7 iPhone4 iPhone4S armv7s iPhone ...
- xcode armv7 armv7s arm64
armv6 armv7 armv7s arm64引起编译包翻倍增大的问题,下边来说一下关于ios这个指令集 目前ios的指令集有以下几种: armv6 iPhone iPhone2 iPhone3G ...
- iOS——armv7,armv7s,arm64详解
这2天升级到xcode6,用ios8 SDK编译老项目,各种Undefined symbols for architecture xxx,精神差点崩溃了.不过最后还是解决了,本文简单总结一下 简单来说 ...
- armv6, armv7, armv7s和i386
出现这类问题一般与静态库有关. i386是代表模拟器,显示i386错误说明静态库不支持模拟器,只支持真机. armv6, armv7, armv7s是ARM CPU的不同指令集,原则上是向下兼容的.如 ...
- ZBar 支持i386 armv6 armv7 armv7s x86_64 arm64
ZBar 支持i386 armv6 armv7 armv7s x86_64 arm64 mp3转码静态库libmp3lame.a,成功加入arm64支持后, 顺便把之前记录的二维码静态库libzbar ...
最新文章
- java值参_Java陷阱之慎用入参做返回值详解
- 机器学习入门方法推荐(少走弯路)入门视频推荐
- Toast的另类应用及另类“拦截”Home键
- 聊一聊社交网络的逻辑、产品和未来
- Visual Studio “Orcas” Beta 2 开始发布多语种版本 包含简体中文
- 真人出镜,微信视频号第一期视频来了!
- DataTable的Merge\COPY\AcceptChange使用说明
- Pytorch(2)-tensor常用操作
- python怎么实现音乐快进_Python 超简单3行代码提取音乐高潮(附批量提取)
- 有人问我,一个人创业需要什么技能?
- 上海世博会物联网技术应用
- 实验楼挑战:备份日志
- 红米手机使用应用沙盒一键修改cpu信息
- MySQL中CONCAT和GROUP_CONCAT方法的区别
- Oracle连接pg,pg连接oracle.sql
- 开源知识管理系统_逛了4年Github,一口气把我收藏的 Java 开源项目分享给你
- 给一个字符串数组,判断其是否是首尾相连的
- android popup
- Web全栈开发训练营
- 【Java基础】入门