Undefined symbols for architecture arm64解决方案

2023-05-16

在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的静态库文件,那么就可以正常编译通过了.


参考文档
1、《Xcode设置项之Architectures和Valid Architectures》

2、《xcode5 arm64》

3、《64-Bit Transition Guide for Cocoa Touch》

4、iOS开发之Architectures设置

5、Xcode设置项之Architectures和Valid Architectures

6、Xcode Build Settings中的Architecture概述

————————————————

转载于:https://blog.csdn.net/zuoyou1314/article/details/46638073

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Undefined symbols for architecture arm64解决方案 的相关文章

  • 用于云服务“沙盒”的 SecurityManager

    All 我正在设计一个基于云的服务 该服务将提供执行客户提交的一些 插件 代码的选项 为了使这项工作正常进行 插件不能威胁系统完整性或有能力访问其他客户端的数据 这一点至关重要 理想情况下 我希望客户端能够提交一个简单的 jar 文件 包含
  • 使用多个提供程序的客户端应用程序应使用什么设计/模式?

    这是一个与设计相关的问题 假设我们有一个名为 ClientAPI 的公共 API 其中包含一些 Web 方法 例如 CreateAccount GetAccount 根据客户的不同 我们使用许多不同的提供商来满足这些请求 假设我们有 Pro
  • 如何发出 JMS 同步请求

    我有一个 Web 应用程序 预计将从外部应用程序获取和显示数据 该外部应用程序只能通过消息传递 JMS 访问 因此 如果用户在浏览器上提交请求 则同一 HTTP 请求线程将必须与消息系统 MQ 系列 交互 以便同一请求线程可以显示从消息系统
  • 使用 i386 arch 而不是 x86_64 在 OSX 上构建 libFLAC

    我正在尝试构建 libFLAC 以在我的项目中使用 但是当涉及到链接时 GCC 会忽略该库 因为它说它不是为当前体系结构 i386 构建的 当我以 64 位编译程序时 它正确链接了库 这意味着该库是针对 x86 64 架构编译的 不幸的是
  • JS 检查深层对象属性是否存在[重复]

    这个问题在这里已经有答案了 我正在尝试找到一种优雅的方法来检查对象中是否存在某些深层属性 因此 实际上试图避免对未定义的情况进行巨大的保护性检查 例如 if typeof error undefined typeof error respo
  • 如何在无 null 设计中实现 List、Set 和 Map?

    当您在大多数情况下可以返回 null 空对象以避免 null 时 这很好 但是像 Collection 这样的对象呢 在爪哇 Map回报null if key in get key 地图上没有找到 我能想到的最好的避免方法null在这种情况
  • socket.io 广播功能 & Redis pub/sub 架构

    如果有人能帮助我解决一个小疑问 我将不胜感激 使用socket io广播功能和在Redis上使用pub sub设计架构有什么区别 例如 在另一个示例中 node js 服务器正在侦听 socket io 针对 键 模型 todo 和值 数据
  • ^ 和 _ 宏之后出现的数字(是:LaTeX 限制?)

    我在 LaTeX 中遇到了一个恼人的问题 我有一个大约 1000 行的 tex 文件 我已经有了一些数字 但是当我尝试添加另一个数字时 它会吐出 Undefined control sequence
  • QuickBlox:arm64 架构的未定义符号

    我使用 Xcode 6 4 并使用 cocoapods 安装了 QuickBlox 框架 使用该框架后 我收到一些错误 例如 Undefined symbols for architecture arm64 OBJC CLASS QBSet
  • 就MVC模式而言,Struts 2中使用的Action是什么?

    在Struts2中 控制器将请求分派给Action Action将其传递给后端逻辑 这可以看作是一个非常大的过程 model 处理请求 JSP代表视图 Struts2中如何定义Action 肯定是not一个看法 是控制器还是模型 Strut
  • 如何在 JavaScript 中检查未定义的变量

    我想检查变量是否已定义 例如 以下内容会引发未定义的错误 alert x 我怎样才能捕获这个错误 在 JavaScript 中 null是一个对象 不存在的事物还有另一种价值 undefined DOM 返回null对于几乎所有无法在文档中
  • 定时任务应该放在哪一层?

    我正在尝试使用分层架构来实现 DDD 应用程序 我有 基础设施层 实现应用程序的技术特定部分的层 领域层 包含领域模型的层 应用层 包含与领域模型交互的干扰的层 接口层 从外部接收事件的层 经典的 3 层 基础设施 架构非常清晰 但我的应用
  • 策略模式还是命令模式?

    假设我有一个金融交易列表 我需要针对这些交易执行一系列验证规则 一个例子是我有一笔购买产品的交易 但是首先我需要验证交易中的帐户是否有足够的可用资金 产品没有售完等 由于这些规则 交易将是标记为拒绝 并应指定错误代码 当然 我正在考虑用一个
  • 如何在不同的分辨率/屏幕上提供相同的应用程序

    Scenario 您需要在不同的屏幕上展示相同的应用程序 假设标准的 15 英寸 17 英寸 便携式 10 英寸和移动 4 英寸 可能在不同的分辨率下工作 Question 您是否尝试采用一种根据可用空间重新排列的流动布局 或者您是否滚动
  • CISC 机器 - 它们不只是将复杂指令转换为 RISC 吗?

    也许我在架构上存在误解 但如果机器有 比如说 乘法指令 该指令是否未转换为更小的指令 或者过于复杂以至于最终与等效的 RISC 指令具有相同的速度 乘法是一个不好的例子 它在两种体系结构中都是一条指令 将上面的 乘法 替换为 CISC 中更
  • 为什么此类方法中的“this”未定义?

    我试图搜索似乎整个互联网 但我仍然对我为微服务编写的 JS 类的问题感到烦恼 仍在学习中 因此 我尝试在实例化对象上调用类方法 根据我的知识和我的 我认为是错误的 单元测试 它应该可以工作 好吧 我将从我收到的错误开始 GET api us
  • JavaScript 数组中的空项和未定义项有什么区别? [复制]

    这个问题在这里已经有答案了 考虑以下 JavaScript 代码 在节点 REPL 中 gt let a new Array 10 undefined gt a lt 10 empty items gt gt a map e gt 1 lt
  • to_proc 方法在 Ruby 中意味着什么?

    我正在学习 Rails 并关注这个线程 https stackoverflow com questions 1961030 我被困住了to proc方法 我认为符号只是字符串的替代品 它们就像字符串 但在内存方面更便宜 如果我还缺少任何其他
  • 动态 getter 和 setter - 一种可能性

    我正在尝试解决最近出现的一个问题 假设我们想要并且知道如何在 javascript 中使用动态 getter 和 setter 就像 php 中的那样 get set 但由于 javascript 没有包罗万象的属性 我们唯一能做的就是提供
  • RESTful API:我应该在哪里编码我的工作流程?

    我正在开发一个 RESTful API 这是我的第一个 API 也是我的第一个真正大型的编码项目 因此 我仍在学习很多关于建筑等方面的知识 目前 我的 api 设置分为以下几层 HTTP层 资源层 领域模型 业务逻辑层 数据访问 存储层 持

随机推荐

  • 如何使用rust实现C语言编译器

    要使用 Rust 实现 C 语言编译器 xff0c 你可以遵循以下步骤 xff1a 学习 Rust 语言的语法和特性 xff0c 以便能够编写 Rust 代码 学习编译器的基本原理和 C 语言的语法和语义 xff0c 以便能够将 C 代码翻
  • docker安装redis并进行数据目录挂载

    从dockerHub拉取镜像到本地 docker pull redis 5 0 9 alpine3 11 创建目录 宿主机 mkdir p opt docker redis conf mkdir p opt docker redis dat
  • uwsgi: error while loading shared libraries: libcrypto.so.1.1: cannot open shared object file: No su

    span class token comment 找到缺少文件的绝对路径 span find span class token operator span span class token operator span name libssl
  • Linux 出现 Read-only file system 怎么处理

    如果你的 Linux 系统出现 34 Read only file system 34 的错误消息 xff0c 这意味着你的文件系统被设置为只读 xff0c 无法进行写操作 这可能是由于磁盘空间不足 文件系统损坏或磁盘 I O 错误导致的
  • windows和linux共用蓝牙鼠标,Ubuntu和Windows双系统蓝牙设备共享配对

    蓝牙设备如键盘 鼠标都可以 装的双系统win7和Ubuntu xff0c 如果只使用一个系统 xff0c 蓝牙鼠标配对一次后可以正常使用 xff0c 但如果下次进的另一个系统必须要重新配对才能使用 所以这篇文章就是解决这个问题的 xff0c
  • python类的实例化

    在 Python 中 xff0c 类的实例化是通过在类名后面加上圆括号的方式来创建一个类的实例 例如 xff0c 如果有一个名为 34 MyClass 34 的类 xff0c 可以通过如下方式创建一个该类的实例 xff1a span cla
  • 如何提取abaqus的位移和其坐标

    坐标 每次在 Abaqus 中运行作业时 xff0c 都会在工作文件夹中创建一个 job name INP 文件 该文件包含节点编号和原始坐标 xff0c 如附图所示 INP 文件可以用任何文本编辑器 xff08 word notepad
  • C语言怎么打印出枚举类型

    在 C 语言中 xff0c 你可以使用 printf 函数来打印枚举类型 首先 xff0c 你需要在枚举类型定义的时候为每一个枚举值赋予一个字符串的别名 xff1a span class hljs built in enum span sp
  • Android android_id, deviceId, oaid的区别

    一 ANDROID ID 1 ANDROID ID是设备首次启动时由系统随机生成的一串64位的十六进制数字 2 获取方式 String ANDROID ID span class token operator 61 span Setting
  • Android设备唯一标识(AndroidID,OAID等 )

    一 ID 体系 xff1a 你只是一串代码 想要了解 OAID xff0c 我们首先需要明白 ID 体系 xff1a 想要追踪一个用户就必须先找到用户 xff0c 在这个过程中 xff0c 标识符 xff08 ID xff09 就像我们的另
  • 如何使用tkinter中的pack使按钮在主窗体正中间

    使用pack 方法可以将按钮放置在主窗体正中间 xff0c 可以使用以下代码 xff1a btn pack expand 61 True fill 61 39 both 39 xff0c 其中expand 61 True表示按钮可以填充整个
  • python实例化的几种表示方式

    Python 中实例化的几种表示方式包括 通过类名直接实例化 如果定义了一个类 34 Person 34 可以使用 34 person 61 Person 34 来实例化该类 通过 super 函数实例化 可以使用 super 函数来实例化
  • 查看git项目工程的地址

    1 xff0c cmd控制台输入 git remote v 命令 首先 xff0c 进入到项目工程目录 xff1a 其次 xff0c 从该目录地址中 xff0c 进入cmd控制台 xff1a 然后 xff0c 输入git remote v
  • 使用Android Studio打包生成Jar包的方法(亲测可用)

    首先我们来说下打成jar包的分类 xff1a 1 application应用打成jar包 2 内库打成jar包 不管是那种打包jar包都得变成内库 xff0c 所以当一种方法讲解了 打jar包之前得让你的项目成内库 xff1a 如何变成内库
  • Android引包出现Duplicate class com.xxx.xxx found in modules错误

    方法一 xff1a 改依赖库的版本 其实就是依赖的包版本不一样 xff0c 产生了冲突 xff0c 把所有依赖的库改成版本一致的就可以了 注意 xff1a 如果有多个library的引用 xff0c 并且各自引入了 so库文件 xff0c
  • Android实现视频播放的3种实现方式

    Android提供了常见的视频的编码 解码机制 使用Android自带的MediaPlayer MediaController等类可以很方便的实现视频播放的功能 支持的视频格式有MP4和3GP等 这些多媒体数据可以来自于Android应用的
  • java:单例模式的五种实现方式

    1 概述 java单例模式是一种常见的设计模式 单例模式有以下特点 xff1a 1 单例类只能有一个实例 xff1b 2 单例类必须自己创建自己的唯一实例 xff1b 3 单例类必须给所有其他对象提供这一实例 xff1b 2 优缺点 优点
  • 如何反编译pyc即pyinstaller出的exe

    有位大佬的代码 https span class token operator span span class token comment blog csdn net qfcy article details 113245876 改pyin
  • Ubuntu 22.04 为 Jellyfin 配置代理

    问题背景 最近捡了一个 1L 小主机 目前装上了 Ubuntu 22 04 打算把这个小东西当作家庭服务器用起来 玩这个当然少不了搭建一套私有影音系统啦 于是在网上找解决方案 自然而然地搭起了一套 Jellyfin 环境 然后就开始踩坑了
  • Undefined symbols for architecture arm64解决方案

    在iOS开发中经常遇到的一个错误是Undefined symbols for architecture arm64 xff0c 这个错误表示工程某些地方不支持arm64指令集 那我们应该怎么解决这个问题了 我们不仅要解决这个问题 更要了解出