博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ios build时,Undefined symbols for architecture xxx问题的总结
阅读量:4596 次
发布时间:2019-06-09

本文共 1587 字,大约阅读时间需要 5 分钟。

这2天升级到xcode6。用ios8 SDK编译老项目,各种Undefined symbols for architecture xxx,精神差点崩溃了。只是最后还是攻克了,本文简单总结一下

简单来说。Undefined symbols基本上等于JAVA的ClassNotFoundException,最常见的原因有这几种:

build的时候没有加framework

比方说。有一段代码我用了OpenGL。引入了头文件

#import 
build的时候,compile阶段没有问题,可是link就报错Undefined symbols for architecture xxx(这里xxx可能是armv7s,armv7或者arm64,取决于配置,稍后会说)。解决方法是在Build Phases的Link Binary With Libraries里增加OpenGLES.framework,再编译就ok了

project依赖的库,编译时Architectures不匹配

在Build Settings里,第一项Architectures,是配置项目的编译体系结构,主要有以下3个配置项:

Architectures:将要创建的Bundle支持的ARCH

Valid Architectures:有效的ARCH。这个配置项没什么用。一般配置成armv7,armv7s,arm64即可了

Build Active Architecture Only:是否仅仅打当前连接设备相应的arch

在真机上,常见的ARCH有3个:armv7,armv7s。arm64

armv7:相应iPhone4和iPhone4S

armv7s:相应iPhone5和iPhone5C,还有早期的iPad

arm64/armv8:相应iPhone5S和iPhone6系列,以及比較新的iPad。如iPad mini2,iPad Air

而ARCH是向下兼容的。比方用armv7打出来的包。能够执行在arm64架构的设备上;反之不行。所以假设应用要支持iPhone4系列。Architectures就一定要包括armv7才行

而Build Active Architecture Only是指是否仅当前连接的设备的架构打包。比方Architectures配置了armv7和arm64,Build Active Architecture Only设置为YES,那么连接iPhone4的时候,就会以armv7打包;连接iPhone5S的时候,就会以arm64打包。假设Build Active Architecture Only设置为NO,那么就会2种架构都打。在执行期依据实际的设备架构来执行。所以最后打出来的Bundle体积会比較大

说了这么多,这个为什么造成Undefined symbols呢?由于还有另外一条规则,就是build link阶段,用arm64生成的.o文件,无法link用armv7s或者armv7生成的.o文件,所以就会link error

常见的情况是,项目引用了一个第三方库(比方从pod来的库)。而这个第三方库打包的时候仅仅支持armv7s和armv7,而项目有使用arm64打包。这个时候就会因为无法link,而报错Undefined symbols

解决的办法是,或者又一次打包第三方库,增加arm64;或者自己的项目去掉arm64

有时候在模拟器上无法构建,在真机上能够

这样的情况我仅仅遇到过一次。我们的app能够连接一个外厂商的蓝牙打印机,对方提供了一个lib。当我们的项目引入了这个lib之后,就无法在模拟器上build通过了,可是在真机上是没问题的

转载于:https://www.cnblogs.com/blfshiye/p/5061323.html

你可能感兴趣的文章
JS封装addClass、removeClass
查看>>
openlayers编辑区域
查看>>
百度地图api接口
查看>>
kendo ui - DropDownList 下拉列表系列
查看>>
Mask R-CNN详解和安装
查看>>
poj2017
查看>>
【程序员人生】优秀程序员的法则
查看>>
cocos2d下,优秀骨骼spine的换装思路
查看>>
Windows 10 MBR转GPT
查看>>
iuplua test failure
查看>>
6 tr
查看>>
同开三本DJANGO,需要提升一下本职工作的能力啦
查看>>
这样就算会了PHP么?-2
查看>>
线段树 (区间查询最大 区间求和 区间加)带lazy
查看>>
三十而立,从零开始学ios开发(十二):Table Views(上)
查看>>
MySQL中的decimal
查看>>
gitlab+jenkins持续集成(一)
查看>>
4.signed/unsigned char
查看>>
iOS,UIImage有个contentmodel属性
查看>>
Debian 7 amd64 + fbterm + ucimf
查看>>