xcode编译时,有第三方库时,编译设置build active architecture only问题
1、http://blog.csdn.net/dengdengxiximeimei/article/details/8845621
这个属性设置为yes,是为了debug的时候编译速度更快,它只编译当前的architecture版本。
而设置为no时,会编译所有的版本。
这个是设备对应的architecture:
armv6:iPhone 2G/3G,iPod 1G/2G
armv7:iPhone 3GS/4/4s,iPod 3G/4G,iPad 1G/2G/3G
armv7s:iPhone5, iPod5
编译出的版本是向下兼容的,比如你设置此值为yes,用iphone4编译出来的是armv7版本的,iphone5也可以运行,但是armv6的设备就不能运行。
所以,一般debug的时候可以选择设置为yes,release的时候要改为no,以适应不同设备。
2、http://blog.sina.com.cn/s/blog_45e2b66c0101bgep.html
build active architecture only设置:
添加一个.a文件到工程中,然后死活编译不过去,提示错误信息:
ld: warning: ignoring file /Users/test/Desktop/new31248/shell42/core/lib/Release-iphoneos/libPyConvertlib4Ipad.a, file was built for archive which is not the architecture being linked (armv7s): /Users/test/Desktop/new31248/shell42/core/lib/Release-iphoneos/libPyConvertlib4Ipad.a
Undefined symbols for architecture armv7s:
"*******(NSString*)", referenced from:
-[***** *****:] in *****.o
。。。。。。。
ld: symbol(s) not found for architecture armv7s
clang: error: linker command failed with exit code 1 (use -v to see invocation)
具体相关设置如下:
用lipo -info 查看.a文件
:input file ******.a is not a fat file
Non-fat file: ******.a is architecture: armv7
说明.a文件只是一个armv7结构,而自己要编译的是要支持armv7和armv7s的fat file,于是可以将architectures属性(保罗release和debug)改为:armv7,这样可以编译过去。
也可以将Build Active Architecture Only 改为Yes,但是此种方法都是只会支持armv7和向下兼容,如果想要兼容armv7s,就最好将.a文件用armv7s 编译,这样就兼容armv7了。
armv6、armv7、armv7s是arm CPU的指令集,一般是向下兼容的。如iPhone4sCPU支持armv7,但它会兼容armv6,只是使用armv6指令可能无法充分发挥它的特性。同理iPhone5是完全支持armv7的,所以不用担心armv7的库不能在iPhone5上跑,一般情况是不会出问题的。但需要提醒的是,苹果是自Xcode4.5之后,就放弃了对armv6的支持,换言之,就是Xcode4.5正常情况是不能编译armv6库的(当然据说通过特殊手段可以支持,之前在网有看到一些在神的帖子,感兴趣的可以搜搜)。还有一点提醒大家,就是可能Xcode4.5编译的包没有armv6,提交应用上传时,会提示要支持armv6,当时此问题把我纠结了好一阵。后来我将支持的最低版本发为iOS4.3就OK。
另附加转载:http://blog.csdn.net/yujie1985/article/details/8552650
armv6、armv7、armv7s是arm CPU的指令集,原则上是向下兼容的,如:iPhone4sCPU支持armv7,但它会兼容armv6,只是使用armv6指令可能无法充分发挥它的特性。iphone5CPU支持armv7s,它也会兼容armv7。
如果引用到第三方的库,以前在iphone4s下编译没有问题,但是换成iphone5之后,提示:
Undefined symbols for architecture armv7s:
"_OBJC_CLASS_$_AMapView", referenced from:
objc-class-ref in libMAMapKit.a(MAMapView.o)
ld: symbol(s) not found for architecture armv7s
大体意思是:引用自XX.a静态库的XX类不支持armv7s指令
原因是:你引用的静态库确实不支持armv7s,那么你要想顺利编译通过,要么通知开发修改,等待支持了之后再测;要么在target的build settings中的valid Architectures 将armv7s先暂时去掉,编译就可以成功。(等待支持了之后,再添加上)
xcode编译时,有第三方库时,编译设置build active architecture only问题的更多相关文章
- 调用第三方库时需注意MD/MT的链接编译方式(遇到的坑记录)
MD与/MT编译 1./MD是动态库链接方式编译 (DEBUG版本是/MDd) 2./MT是静态库链接方式编译 (DEBUG版本是/MTd) 编译器不会检查到的问题 我今天遇到的记录下来 当你调用第三 ...
- 安装需要的第三方库时,命令行输入pip提示不是内部或外部命令
简介 在做Python开发时,安装需要的第三方库时,大多数人喜欢选择在命令行用pip进行安装. 然而有时敲入pip命令会提示‘pip’不是内部或外部命令..如图: 解决办法 1.在python安装目录 ...
- cocos项目导入其它源文件时加入依赖库时,头文件提示找不到文件夹中的文件
cocos项目导入其它源文件时加入依赖库时,头文件提示找不到文件夹中的文件解决方法: 选择项目属性->c/c++->常规,在附加包括项目中加上对应的文件夹 cocos test项目的库(所 ...
- iOS之关于Architectures设置及Build Active Architecture Only编译设置
一,前言 最近在帮朋友解决极光报错的提示:“file was built for archive which is not the architecture being linked (i386)”时 ...
- Xcode的Architectures、Valid Architectures和Build Active Architecture Only属性
Architectures 这代表,在这个项目里你想要Xcode编译的目标设备列表. Valid Architectures 还不是太明确这个设置的意图,但是一般来说是不需要更改的,和Architec ...
- Xcode的Architectures、Valid Architectures和Build Active Architecture Only属性(原创)
最近xcode升级了5.1版本,升级之后程序报关于要适配arm64机器的错.之前对xcode的参数配置,一直不是很了解,但实现先面对问题了,就调查了一下并解决它. 一个一个来吧. Architectu ...
- Xcode 中armv6 armv7 armv7s arm64 i386 x86_64 归纳 (Architectures, Valid Architectures, Build Active Architecture Only)
http://www.jianshu.com/p/09b445300d40 简介: armv7|armv7s|arm64都是ARM处理器的指令集 i386|x86_64 是Mac处理器的指令集 目前i ...
- xcode选项Build Active Architecture Only的作用
Build Active Architecture Only 设置: 设置为NO的时候,会导致react-native项目启动失败npx react-native run-ios 根据错误信息 bui ...
- iOS开发遇到的坑之六--使用cocopods管理第三方库时,编译出现Library not found for -lPods问题的解决办法
在项目中有时候会遇到Library not found for -lPods(这里的IPods指的是你具体的第三方库)的问题 出现这个错误的原因是:xcode在编译的时候找不到这个库,从而导致项目无法 ...
随机推荐
- Timeline简单配置
Timeline是一个Jquery时间轴插件.效果如图 获取地址:https://github.com/ka215/jquery.timeline 配置 (1)html表头加入 <link re ...
- MongoDB系列四:解决secondary的读操作
http://blog.itpub.net/26812308/viewspace-2124660/ 在Replica sets 中的secondary节点默认是不可读的.使用Replica Sets实 ...
- ssh免密码登录的注意事项
centos配置完免密码登录(注意修改配置文件,/etc/ssh/sshd_config),合并完公钥后,有的时候还得需要输入密码.这时候应该检查一下authorized_keys的权限问题.本机的正 ...
- 《深入理解Android 卷III》第二章 深入理解Java Binder和MessageQueue
<深入理解Android 卷III>即将公布.作者是张大伟.此书填补了深入理解Android Framework卷中的一个主要空白,即Android Framework中和UI相关的部分. ...
- Linux经常使用命令(八) - touch
linux的touch命令不经常使用, 一般用来改动文件时间戳, 或者新建一个不存在的文件. 1. 命令格式: touch [选项] 文件 2. 命令參数: -a 仅仅更改存取时间. -c ...
- Nmon命令行:Linux系统性能的监测利器
如果你眼下正在寻找一款非常易于使用的Linux性能监测工具,那么我强烈推荐安装和使用Nmon命令行实用工具. Nmon监测工具 Nmon是一款面向系统管理员的调优和基准测量工具,可以用来显示关于下列方 ...
- 升级滑动销毁activity,随着手势的滑动而滑动的效果
文章开头先注明本滑动销毁是对 http://blog.csdn.net/xiaanming/article/details/20934541 这篇博客的内容进行一个小小的改动 添加向左滑动打开另外一个 ...
- 【Excle数据透视表】如何水平并排显示报表筛选区域的字段
原始效果 目标效果 解决方案 设置数据透视表"在报表区域筛选显示字段"为"水平并排" 步骤 方法① 单击数据透视表任意单元格→数据透视表工具→分析→选项→布局和 ...
- Catch That Cow(广度优先搜索_bfs)
Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 48036 Accepted: 150 ...
- git revert 后悔了 还原修改前的版本 + git 常用命令
昨天手残 然后在GitHub for windows 上点了revert 然后就给重置了 更手残的是又给同步了 . 但是 GitHub 会保留之前的版本 . 只要删掉本次修改就可. 解决方案: g ...