我想为 M1 MacBook 编译 OpenJDK 11。
首先,我尝试使用Zulu JDK,但没有找到编译它的方法。
然后,我尝试在M1上尝试编译OpenJDK,但是当我运行
sh configure
时报告错误。
错误是:
configure:目标中测试的位数(64)与 预期在目标 (32) 配置中找到的位数: 错误:无法继续。
那么,我该如何编译呢?
适用于目标(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 Silicon、ARM 的 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 Sur 和 Monterey 上使用 IntelliJ 和 Maven。运行良好,没有任何问题。
正如所评论的,您的具体错误可能是由于您编译为32位ARM而不是Apple用于其M1芯片和M2芯片系列的64位ARM架构。
如果您对从 OpenJDK 代码库编译 Java 感到好奇或有学术兴趣,我建议您查看 Adoptium(以前称为 AdoptOpenJDK)中的开源工具。 OpenJDK 站点上用于构建早期访问版本的工具也可能是开源的,但我不确定。
您可以在 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
我已经测试过它并且构建完美。
您现在可以使用 OpenJDK 11.0.15 源代码进行尝试。以前,M1 CPU 将被检测为 ARM32 (macosx-arm),这就是您看到该错误的原因。
JDK 目录中的文件
make/autoconf/platform.m4
:
arm*)
VAR_CPU=arm
VAR_CPU_ARCH=arm
VAR_CPU_BITS=32 ## Update to 64
VAR_CPU_ENDIAN=little
;;