在iOS开发中经常遇到的一个错误是Undefined symbols for architecture arm64,这个错误表示工程某些地方不支持arm64指令集。那我们应该怎么解决这个问题了?我们不仅要解决这个问题,更要了解出现这个问题的根源.这样根本上杜绝这类问题发生.

对于iOS设备来说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

在Xcode的target->Build Settings中有一个Architectures的分组主要是用来设置Architectures方面的内容,下面重点介绍下面几个设置项的内容。

Architectures

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

官方文档说明:

Space-separated list of identifiers. Specifies the architectures (ABIs, processor models) to which the binary is targeted. When this build setting specifies more than one architecture, the generated binary may contain object code for each of the specified 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。

官方文档说明:

Boolean value. Specifies whether the product includes only object code for the native architecture.

Valid Architectures

该编译项指定可能支持的指令集,该列表和Architectures列表的交集,将是Xcode最终生成二进制包所支持的指令集。

比如将Valid Architectures设置支持的arm指令集版本有:armv7、armv7s、arm64,对应的Architectures设置的支持arm指令集版本有:armv7s,这时Xcode只会生成一个armv7s指令集的二进制包。

官方文档说明:

Space-separated list of identifiers. Specifies the architectures for which the binary may be built. During the build, this list is intersected with the value of ARCHS build setting; the resulting list specifies the architectures the binary can run on. If the resulting architecture list is empty, the target generates no binary.

说明

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

示例

在做项目的时候,用到了第三方社交分享静态库是时候,会编译失败,先来看看下图

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

发现了这个静态库只支持armv7 armv7s i386 . 而在我的工程中Valid Architectures和Architectures中均包含了arm64的指令集,这就是说明我需要编译的app最终要支持arm64的,而程序中用到的静态库并没有arm64,所以才导致了出错,因此,需要我们去重新下载一个支持arm64的静态库文件,那么就可以正常编译通过了.

ios Undefined symbols for architecture arm64相关推荐

  1. 关于导入.a文件后报错Undefined symbols for architecture arm64:

    这里导致的原因可能是整个.a文件都不支持或者有几个类不支持arm64 ,也有可能是一些类库没有导入或导入不全的缘故 出现Undefined symbols for architecture arm64 ...

  2. Undefined symbols for architecture arm64:

    静态库.a里面依赖了AFNetworking的一些头文件,将静态库引入项目中后,编译项目,报如下错误 Undefined symbols for architecture arm64:"_O ...

  3. ios打framework包:Undefined symbols for architecture arm64:

    首页查看framework支持的CPU类型: lipo -info MixedDevelopmentCameraAndPhotoAlbum.framework/MixedDevelopmentCame ...

  4. Xcode编译Undefined symbols for architecture xxx 错误总结

    2019独角兽企业重金招聘Python工程师标准>>> 领个红包,支持一下作者 这是支付宝推出的一个最新活动,用支付宝扫码即有红包送,0元到99元不等,红包可以到店支付使用,每日仅可 ...

  5. IOS开发报错之Undefined symbols for architecture armv6

    本文转载至  http://blog.csdn.net/sanpintian/article/details/7575434 今天在项目中引入SVSegmentedControl.h/.my以及SVS ...

  6. iOS报错:108 duplicate symbols for architecture arm64

    报错: 108 duplicate symbols for architecture arm64 由于项目中导入了相同的.a文件造成,删除掉多余的保留一个就行了.

  7. iOS ld:2 duplicate symbols for architecture arm64 clang:error:linker commang failed with exit ...

    当我们运行程序 .修改代码.或者添加第三方或者SDK的时候经常会出现下面的问题 ld:2 duplicate symbols for architecture arm64 clang:error:li ...

  8. 部分库不支持32位系统archive报错:Undefined symbols for architecture armv7

    Undefined symbols for architecture armv7: "_av_copy_packet", referenced from: _DuplicatePk ...

  9. 经典错误:symbol(s) not found for architecture x86_64 || Undefined symbols for architecture x86_64:

    记录经典,防止踩坑!!!!! 真机可以运行,模拟器报错. 错误信息显示如下: Ld /Users/lyj/Library/Developer/Xcode/DerivedData/MYPayBucket ...

  10. mac编译openresty报Undefined symbols for architecture x86_64

    ./configure --prefix=/usr/local/openresty --with-luajit --with-http_sub_module --add-module=../ngx_h ...

最新文章

  1. JavaScript基础一
  2. 可以由指令直接指定的I/O端口数(一共256个,从0到255一共256个端口号)
  3. [09]CSS 边框与背景 (上)
  4. java图像处理之查找表实现图像处理加速
  5. 李航第六章的BFGS算法
  6. globals() 和 locals() 函数
  7. Mask R-CNN抢车位,快人一步!
  8. 别人家的地铁!长沙地铁全面进入5G时代 下载速率达1Gbps
  9. mysql.socket没有_mysql启动找不见socket
  10. 匿名函数自调的三种方法
  11. iwconfig 中 Link Quality and Signal Level 区别
  12. android图片颜色识别器,颜色识别器APP
  13. 使用Redis,QQ邮箱模拟验证码验证
  14. win10升级2004失败?
  15. 论文阅读及代码学习-Directed Acyclic Graph Network for Conversational Emotion Recognition
  16. java 货币格式 转换_Java 转换货币形式
  17. matlab黄金分割法
  18. 炒作与现实的博弈,厂商大肆宣传自动驾驶致司机陷入危险
  19. NAS自动挂载和关闭硬盘电源原理
  20. 计算机cpu风扇关闭,cpu风扇怎么关闭

热门文章

  1. (日常搬砖)voc(xml)格式的标注转换为coco(json)格式
  2. Ubuntu 18.04 通过 ufw route 配置网关服务器
  3. 懒人神器——新手必备的图片后期处理软件
  4. Vue组件创建和组件传值
  5. 荷兰铁路在采纳敏捷和精益中的做法
  6. 数据资产管理:大数据时代的新风口
  7. mysql 去除空格
  8. DNS   案例1 案例5轮询
  9. DRBD+Heratbeat+NFS高可用文件共享存储
  10. 代码随想录程序员求职攻略完整pdf开放下载