开发中遇到arm64之类的报错多种解决方案

本文探讨iOS SDK开发中遇到的arm64指令集不支持问题,包括错误样例、iOS设备指令集区别及解决方案,如build setting配置、静态库支持与SVN版本控制器设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

公司做SDK开发难免遇到用户使用SDK遇到各种各样的原因,固然使用文档说明排除的大部分,但难免会有用户自己的工程报其他错而怀疑是SDK的问题,不得不一一去协助解决,下面关于arm64指令集不支持的错误总计:

部分报错内容

 Undefined symbols for architecture arm64:

  "_OBJC_CLASS_$_WBAuthorizeResponse", referenced from:
      objc-class-ref in Payment(MCHApi.o)
  "_OBJC_CLASS_$_WBAuthorizeRequest", referenced from:
      objc-class-ref in Payment(MCHLoginView.o)
  "_OBJC_CLASS_$_WeiboSDK", referenced from:
      objc-class-ref in Payment(MCHApi.o)
      objc-class-ref in Payment(MCHLoginView.o)
  "_OBJC_CLASS_$_BaiduOAuthSDK", referenced from:
      objc-class-ref in Payment(MCHApi.o)

      objc-class-ref in Payment(MCHLoginView.o)

先说一下关于指令集的详细内容,不用指令集代表不同的设备

对于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

关于报错总结一下几点原因:

1.build setting里面的 Architectures设置问题


Architectures 设置所支持的指令集

Build Active Architectures Only  YES的时候是针对所测试的设备去生成所对应的二进制包(例如此刻是iPhone6 ,那么就只会生成一套arm64指令集的二进制),NO的时候回生成所有支持指令集的二进制包,当然这样会消耗资源。

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

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

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

2.是所用的静态库有的可能不支持arm64等指令集,那么就需要我们去重新获取一份支持arm64的静态库文件


3.就是用到SVN版本控制器的时候,默认忽略几种类型的文件的,例如.a  .o

1.在finder需要去查找cornerstone的文件 ,com+shift+G  ,或者点开finder-前往-前往文件夹, 把该路径 ~/.subversion/config 粘贴到上面,点击 前往


2、打开config文件,在里面搜索 global-ignores ,你会看到下面这行,

#global-ignores = .o .lo .la .al .libs .so .so.[0-9]* .a .pyc .pyo # .rej ~ ## .#* .*.swp .DS_Store

将其修改为

global-ignores = .o .lo .la .al .libs .so .so.[0-9]* .pyc .pyo#  .rej ~ ## .# .*.swp .DS_Store


保存后,再打开svn进行上传就不会丢失.a文件了

PS:上传图片不知道怎么回事出现的都是❓不显示,很烦躁,还有一些原因暂时没遇到过,先不写了

<think>好的,我现在要解决用户在ARM架构的Windows系统上安装软件时遇到的错误问题。首先,我需要明确用户的具体情况。根据用户提供的引用内容,用户可能是在使用ARM版的银河麒麟系统,或者ARM架构的Windows,遇到软件安装错误,特别是与Python环境或架构不兼容相关的问题。 首先,用户提到引用[1]中指出虚拟环境需要是ARM架构的,特别是PyTorch等库需要对应架构的版本。这说明用户可能在安装某些Python库时遇到了问题,可能是因为在ARM环境下安装了x86的版本。所以解决方案之一应该是确保所有安装的软件包都是ARM兼容的版本。 接下来,引用[2]提到Wine和Box86/Box64的作用。Wine允许在非Windows系统运行Windows应用,但需要架构匹配。而Box86/Box64用于在ARM架构上运行x86/x64应用。用户可能在ARM Windows上尝试运行x86软件,导致错误。所以可能需要使用类似Box64的工具来转换架构,或者确保安装的Windows软件本身有ARM版本。 引用[3]指出软件安装后运行报错,可能是因为crossover(基于Wine)支持的Python版本太低,或者系统Python版本与软件不兼容。用户提到飞腾CPU(ARM架构),所以可能需要更新Python环境或使用ARM兼容的Python版本。 现在,我需要综合这些信息,整理出解决方案的步骤。首先检查软件是否为ARM架构编译,如果不是,寻找替代版本或使用转换工具。其次,确保依赖库如PyTorch是ARM版本。然后,检查Python环境是否兼容,可能需要使用虚拟环境或更新Python。此外,使用Box86/Box64这类工具可能帮助运行x86软件,但需要注意性能损耗。 可能的问题还有系统依赖库缺失,需要安装必要的运行库。如果使用Wine或crossover,可能需要配置正确的架构支持。对于Windows ARM本身,可能有些软件有原生ARM版本,比如某些微软的软件,或者通过微软的x86/ARM转换层运行,但兼容性可能有限。 用户的问题是在ARM架构的Windows上安装软件报错,可能涉及架构不匹配、依赖库不正确、Python版本问题等。需要逐一排查这些可能,并提供相应的解决步骤。</think>针对在ARM架构的Windows系统上安装软件时遇到的错误,以下是分步解决方案--- ### **1. 确认软件架构兼容性** - **检查软件是否支持ARM架构** 优先选择标注支持`Windows on ARM`或明确提供ARM64版本安装包的软件。例如,微软Office、Edge浏览器等已原生支持ARM架构[^2]。 - **使用Windows子系统兼容层** Windows 11的ARM版本内置了x86/x64模拟器,可尝试直接安装x86/x64软件。若报错提示架构不兼容,需通过以下命令开启模拟功能: ```powershell Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Control\Session Manager\Environment" -Name "WINEMULATE" -Value "x86" ``` --- ### **2. 处理依赖库与运行环境** - **Python环境配置** 若报错与Python相关(如PyTorch、TensorFlow),需安装ARM架构专用版本: ```bash # 使用conda创建ARM虚拟环境 conda create -n arm_env python=3.10 conda activate arm_env pip install torch -f https://pytorch.org/get-started/locally/#windows-on-arm ``` 确保所有依赖库均通过ARM兼容渠道安装,避免混用x86包[^1]。 - **安装ARM专用运行库** 部分软件依赖Visual C++ Redistributable等运行库,需下载ARM64版本: - 访问[微软官方ARM64支持库](https://learn.microsoft.com/en-us/cpp/windows/latest-supported-vc-redist)获取安装包。 --- ### **3. 使用架构转换工具** - **Box64/Box86(适用于Linux子系统)** 若通过WSL运行Linux软件,可使用Box64/Box64转换x86指令: ```bash # 安装Box64(以Ubuntu为例) sudo apt-get install box64 # 运行x86程序 box64 ./x86_program.exe ``` 注意:此方法适用于Linux环境,Windows原生应用需依赖系统模拟器[^2]。 - **交叉编译工具链** 对于开源软件,可使用ARM交叉编译工具链重新编译: ```bash # 示例:使用gcc-arm交叉编译器 arm-linux-gnueabihf-gcc -o arm_program program.c ``` --- ### **4. 替代方案与兼容工具** - **使用Crossover/Wine的ARM优化版** 若运行Windows应用报错,尝试更新Crossover至最新版(支持ARM优化): ```bash # 麒麟系统示例 sudo apt install crossover-arm wine-arm64 setup.exe ``` 确保配置Wine为ARM模式: ```bash export WINEARCH=winarm64 ``` - **虚拟机方案** 安装Hyper-V或QEMU虚拟机运行x86系统,但性能损耗较高。 --- ### **常见错误与修复** - **错误:`Illegal instruction (core dumped)`** **原因**:x86指令集无法在ARM CPU执行。 **解决**:换用ARM版本软件或启用模拟器。 - **错误:`DLL load failed`** **原因**:依赖库架构不匹配。 **解决**:下载ARM64版DLL文件,替换`C:\Windows\System32`或软件目录下的同名文件。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值