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

本文介绍了在Apple M1芯片环境下,如何解决基于ARM架构的Nacos 2.0+版本启动失败的问题,包括使用OracleJDK替代、依赖库的兼容挑战以及临时性能牺牲的方法。

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

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

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

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

在这里插入图片描述

报错核心问题信息如下:(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)]

评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值