如何在 M1 Macbook 上编译 OpenJDK 11?

问题描述 投票:0回答:5

我想为 M1 MacBook 编译 OpenJDK 11。

首先,我尝试使用Zulu JDK,但没有找到编译它的方法。

然后,我尝试在M1上尝试编译OpenJDK,但是当我运行

sh configure
时报告错误。

错误是:

configure:目标中测试的位数(64)与 预期在目标 (32) 配置中找到的位数: 错误:无法继续。

那么,我该如何编译呢?

java java-11 openjdk-11
5个回答
14
投票

tl;博士

目标(64)与目标(32)中的......位数不同

适用于

macOS(M1、M2)的 Apple Silicon 芯片均为 64 位架构。请勿针对 32 位进行编译。

我想在M1 MacBook上编译jdk。

不要尝试编译 OpenJDK。代码库庞大且复杂。不需要,因为其他人提供二进制文件和安装程序。

对于使用 Apple Silicon 而不是 Intel x86-64 的 Mac,我建议从多家供应商中的任意一家获取适用于 macOS / AArch64 的 Java 17 发行版,该发行版于 2021 年 09 月发布。

或者,使用由各个供应商移植到 Apple Silicon 的 Java 早期版本的构建。例如,Azul Systems 宣布 2020 年 11 月 计划为基于 Apple SiliconARM 的 Mac 发布 OpenJDK 8 和 11 版本。我看到该公司现在可以在 Intel Mac 和 Apple Silicon Mac 上下载 Java 11.0.13+8

详情

我们很少有人编译过 OpenJDK 非常庞大且复杂的代码库。相反,我们寻求提供构建和安装程序的多家供应商中的任何一家。如果您的目标是高效地进行 Java 编程,那么编译 Java JDK 工具集并不是您时间的最佳利用方式。

Java 17 于 2021 年 9 月发布。 OpenJDK 正式支持 Apple Silicon 上的 macOS:JEP 391:macOS/AArch64 端口。您可以选择来自多个供应商的构建/安装程序,例如 SAP、Red Hat/IBM、BellSoft、Azul Systems、Oracle、Adoptium/AdoptOpenJDK、Microsoft、Amazon、Pivotal 等。这些构建/安装程序将主要或完全基于 OpenJDK 代码库。

Azul Systems 等供应商为当前版本 19 以及长期支持 (LTS) 版本 8、11 和 17 提供 Apple Silicon 版本。Java 17 是最新的 LTS 版本,将提供多年支持。所以我建议部署 Java 17。

我自己一直在几台 M1 MacBook Pro 笔记本电脑上使用 Java 17、18 和 19,以及早期访问版 20,并在 Big SurMonterey 上使用 IntelliJMaven。运行良好,没有任何问题。

编译Java

正如所评论的,您的具体错误可能是由于您编译为32位ARM而不是Apple用于其M1芯片M2芯片系列的64位ARM架构。

如果您对从 OpenJDK 代码库编译 Java 感到好奇或有学术兴趣,我建议您查看 Adoptium(以前称为 AdoptOpenJDK)中的开源工具。 OpenJDK 站点上用于构建早期访问版本的工具也可能是开源的,但我不确定。


4
投票

您可以在 Homebrew 的帮助下,通过运行以下命令在 M1 MacBook 上构建 OpenJDK 11.0.12:

brew install --build-from-source --verbose openjdk@11

Xcode是先决条件,您可以从那里下载它https://developer.apple.com/download/more/(需要Apple ID)。

你可能还必须运行:

xcode-select --install
sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

我已经测试过它并且构建完美。


2
投票

我已经安装了Android Studio版本,请看截图

我在构建 Flutter 应用程序时遇到问题(安装 JAVA ),因此我安装了 JDK 17,但它不兼容。

我去了AZUL

我安装了第一个 .dmg 文件。 请看截图

它将解决使用 M1 Mac 构建 Gradle 和 APK 的问题


1
投票

您现在可以使用 OpenJDK 11.0.15 源代码进行尝试。以前,M1 CPU 将被检测为 ARM32 (macosx-arm),这就是您看到该错误的原因。


0
投票

JDK 目录中的文件

make/autoconf/platform.m4

arm*)
      VAR_CPU=arm
      VAR_CPU_ARCH=arm
      VAR_CPU_BITS=32  ## Update to 64
      VAR_CPU_ENDIAN=little
      ;;
© www.soinside.com 2019 - 2024. All rights reserved.