M1芯片Mac运行Sencha Themer 1.4.0卡99%报架构不兼容如何修复
问题原因
该故障由架构不兼容导致:Sencha Themer 1.4.0内置的JNA(Java Native Access)原生库仅包含i386、x86_64架构编译产物,缺少Apple M1系列芯片所需的arm64e架构支持,程序调用macOS原生Carbon接口实现文件监听时加载本地库失败,直接造成打开/创建主题时进度条卡在99%无法完成加载。
涉及运行环境信息:
- 设备:Apple M1芯片Mac,系统版本macOS Monterey 12.4
- 程序版本:Sencha Themer 1.4.0
- Java运行环境:
java version "1.8.0_333" Java(TM) SE Runtime Environment (build 1.8.0_333-b02) Java HotSpot(TM) 64-Bit Server VM (build 25.333-b02, mixed mode)
核心报错日志:
[2022-06-10 00:28:29.051] [DEBUG] [default] - Exception in thread "Thread-34" [2022-06-10 00:28:29.051] [DEBUG] [default] - java.lang.UnsatisfiedLinkError: /private/var/folders/d9/h_t37l0x3hj1h7r4vsd50ngw0000gn/T/jna--1385014272/jna2864571768082386130.tmp: dlopen(/private/var/folders/d9/h_t37l0x3hj1h7r4vsd50ngw0000gn/T/jna--1385014272/jna2864571768082386130.tmp, 0x0001): tried: '/private/var/folders/d9/h_t37l0x3hj1h7r4vsd50ngw0000gn/T/jna--1385014272/jna2864571768082386130.tmp' (fat file, but missing compatible architecture (have 'i386,x86_64,unknown', need 'arm64e')) at java.lang.ClassLoader$NativeLibrary.load(Native Method) at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1950) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1832) at java.lang.Runtime.load0(Runtime.java:811) at java.lang.System.load(System.java:1088) at com.sun.jna.Native.loadNativeDispatchLibraryFromClasspath(Native.java:761) at com.sun.jna.Native.loadNativeDispatchLibrary(Native.java:736) at com.sun.jna.Native.<clinit>(Native.java:131) at com.sencha.jna.mac.Carbon.<clinit>(Carbon.java:11) at com.sencha.tools.watchers.FSEventWatchService$1.run(FSEventWatchService.java:41) at com.sencha.util.ThreadUtil$1.run(ThreadUtil.java:65) at com.sencha.util.ThreadUtil$2.run(ThreadUtil.java:162) at java.lang.Thread.run(Thread.java:748)
修复方案
方案一:快速修复(无需修改程序文件)
- 完全退出正在运行的Sencha Themer
- 打开访达进入应用程序目录,找到
Sencha Themer.app,右键选择「显示简介」 - 在简介窗口勾选使用Rosetta打开选项
- 重新启动Sencha Themer即可正常使用,加载进度不会再卡在99%。Rosetta转译层会自动兼容x86_64架构的JNA库,不需要额外调整Java环境配置。
方案二:原生arm64运行(无转译性能损耗)
如果不需要Rosetta转译,可通过替换程序内置旧版JNA库实现原生arm64模式运行:
- 完全退出Sencha Themer
- 右键
Sencha Themer.app选择「显示包内容」,依次进入Contents/Resources/app/lib/目录 - 找到目录内的
jna-3.5.2.jar、jna-platform-3.5.2.jar两个文件,备份到其他目录后删除原文件 - 下载支持arm64架构的JNA 5.6及以上版本的
jna.jar、jna-platform.jar,将两个文件重命名为和上述旧文件完全一致的名称,放回原lib目录 - 重启Sencha Themer即可在原生arm64模式下正常运行。
注意:如果替换JNA版本后出现启动异常,将备份的旧版jar包放回原目录,改用方案一的Rosetta模式运行即可。
内容的提问来源于stack exchange,提问作者Lucaele
相关产品推荐
相关产品推荐

