Undefined symbols for architecture arm64解决方案

在网上搜了好久,各种解决方法
出现这个问题的原因可能不是唯一的,我出现这个问题的原因是因为自己二逼的使用导入FMDB包的时候,没有在Build Phases-->Link Binary With Libraries中添加libsqlite.tbd
总结了一下,出现这个问题的原因有我出现的这种,在使用第三方包的时候,没有导入相应的框架
还有就是导入第三方的静态库只支持armv7 armv7s i386 . 而在你的工程中Valid Architectures和Architectures中均包含了arm64的指令集,需要你下载一个支持arm64的静态库文件
示例(盗用岽少的专栏的)
在做项目的时候,用到了第三方社交分享静态库是时候,会编译失败,先来看看下图

1240

看,它忽略了那个静态库文件导致链接失败了,然后我查看了静态库所支持的架构,打开终端输入查看命令lipo - info xxx.a ,结果如下:

1240


还有一些说的target->Build Settings-->Architectures的arm64删掉,不知道会不会有影响,可以尝试一下

另外补充一下:iOS的指令集有armv6、armv7、armv7s、arm64
这样四种,不同型号的iOS设备使用不同的指令集
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

Architectures
该编译选项指定了工程将被编译成支持哪些指令集,支持指令集是通过编译生成对应的二进制数据包实现的,如果支持的指令集数目有多个,就会编译出包含多个指令集代码的数据包,造成最终编译的包很大。

Build Active Architectures Only
该编译项用于设置是否只编译当前使用的设备对应的arm指令集。
当该选项设置成YES时,你连上一个armv7指令集的设备,就算你的Valid Architectures和Architectures都设置成armv7/armv7s/arm64,还是依然只会生成一个armv7指令集的二进制包。
当然该选项起作用的前提是你的Xcode必须成功连接了调试设备。如果你没有任何活跃设备,即Xcode没有成功连接调试设备,就算该设置项设置成YES依然还会编译Valid Architectures和Architectures指定的二进制包。
通常情况下,该编译选项在Debug模式都设成YES,Release模式都设成NO。

指令集是向下兼容的。比如,armv7s指令集的设备,可以兼容运行使用armv7、armv6编译的程序



作者:人家其实是小公举啦
链接:http://www.jianshu.com/p/d9b3c5a845a2
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

转载于:https://my.oschina.net/jack088/blog/1492524

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值