m1芯片启动2.0版本以上nacos报错(mach-o file, but is an incompatible architecture (have ‘x86_64‘, need ‘arm64e‘)

2年前 (2022) 程序员胖胖胖虎阿
183 0 0

关于基于arm架构的m1及m1以上芯片无法使用2.0以上版本nacos的解决方案

官方解决方案穿越:https://github.com/alibaba/nacos/issues/4336

问题简述:最近在学习使用低代码平台工具Ruo Yi-Cloud(低代码平台微服务版本),项目基于nacos作为服务的注册中心,最新版本需要nacso需要2.0以上版本,下载最新版本nacos启动nacos报错截图如下:

m1芯片启动2.0版本以上nacos报错(mach-o file, but is an incompatible architecture (have ‘x86_64‘, need ‘arm64e‘)

报错核心问题信息如下:(mach-o file, but is an incompatible architecture (have ‘x86_64’, need ‘arm64e’)) ,

解决方案

项目安利,若依低代码平台(微服务版):https://gitee.com/y_project/RuoYi-Cloud

解决方案核心:更换基于x86架构的jdk

以下阐述全部抄自于github

目前在使用 Apple M1,现在已经能够运行 nacos 服务,分享下一些实践经验。

M1 使用 zulu JDK 编译会碰到如下错误,依赖关系为 nacos -> jraft -> rocksdb5.x ,目前最新版的 rocks6.x 系列也暂未支持 M1 架构,但已有大神在尝试编译 mac 通用版本(x86 和 aarch64 通用),最近也有进度,见:facebook/rocksdb#7720

librocksdbjni14096835716120570872.jnilib: mach-o, but wrong architecture

虽然已经有 M1 架构的 rocksdb 民间编译版本:https://bintray.com/maryk/maven/rocksdbjni/6.17.0
但 jraft 依赖的 BloomFilter 在 rocks6.x 系列版本里发生了 Break Change,导致无法使用。

所以想要使用 zulu JDK 运行,还需要等待:

  • rocksdb Mac 通用版本发行
  • jraft 升级依赖,修复版本兼容问题

但这并不代表我们就只能干等了,还是有办法继续运行 rocksdb 的,只是要牺牲一些性能罢了:

Nacos 开发者:解决源码运行问题

直接看重点:使用 Oracle JDK 1.8 以上可以成功运行源码
优点:使用的 Rosseta 转译过的 Oracle JDK,几乎没啥兼容问题
缺点:性能回到上代 i5 ~i7 之间水平,启动时间相比 zulu JDK 延长 5 倍左右,但还可接受

Nacos 用户:解决服务运行问题

指定 JAVA_HOME 到 Oracle JDK,再运行官网下载的服务包即可,例如:

我们也可以直接将nacos的配置文件中jdk指向安装的基于x86的jdk路径即可

# JAVA_HOME 每台机器都不一样,请改成本机路径
export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_281.jdk/Contents/Home \
&& sh startup.sh -m standalone

总结

其实,M1 的所有兼容问题,在没有 native 支持的版本出来之前,我们几乎都可以通过 rosseta 解决。
补充个大宝藏:
同时安装 x86 架构的 homebrew 和 arm 架构的 homebrew,保佑你安然渡过 M1 过渡期
[TIP | The BEST way to install Homebrew (Brew) on Apple Silicon (M1)]

相关文章

暂无评论

暂无评论...