如何在M1 Macbook上编译OpenJDK 11?

13

我想要在M1 MacBook上编译OpenJDK 11。

首先,我尝试使用Zulu JDK,但是我没有找到一种方法来进行编译。

然后,我尝试在M1上尝试编译OpenJDK,但是当我运行sh configure时出现错误。

错误信息如下:

configure: The tested number of bits in the target (64) differs from the number of bits expected to be found in the target (32) configure: error: Cannot continue.

那么,我该如何编译它呢?


1
你为什么想要这样做呢?这是一个非常庞大和复杂的软件基础,而且其他人已经完成了这项工作。 - Thorbjørn Ravn Andersen
3
为什么你想自己构建它呢?现在甚至还没有AdoptOpenJDK的构建版本,所以自己动手拼凑似乎容易出问题。顺便说一下,错误很可能表明你正在尝试为32位ARM构建,而M1是ARM64。 - somethingsomething
如果你提出这个问题(或者像我一样来到这里的其他人)的原因仅仅是因为Oracle没有jdk11的M1版本,那么只需下载ARM(ARM 64 Compressed Archive)的Linux版本即可。这对我的M1机器有效。 以下是链接:https://download.oracle.com/otn/java/jdk/11.0.16%2B11/b8c39bd7f0064c2aa24e6002b391bd0f/jdk-11.0.16_linux-aarch64_bin.tar.gz - bladefist
https://dev59.com/X1EG5IYBdhLWcg3wTZp7 - Wahab Khan Jadon
4个回答

16

简短总结

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

Apple Silicon芯片适用于macOS(M1,M2),都是64位架构。不要编译成32位

我想在M1 MacBook上编译jdk。

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

对于使用Apple Silicon而不是Intel x86-64的Mac,我建议从几个供应商中获取适用于macOS / AArch64的Java 17发行版,发布于2021年9月。
或者,使用由各个供应商移植到Apple Silicon的早期Java版本的构建。例如,Azul Systems在2020年11月宣布计划为基于ARM的Mac提供OpenJDK 8和11的构建版本。我看到该公司现在提供了适用于Intel Mac和Apple Silicon Mac的Java 11.0.13+8的下载。
详情
我们很少编译OpenJDK这样庞大而复杂的代码库。相反,我们寻求提供构建和安装程序的几个供应商之一。如果您的目标是在Java编程中提高生产力,那么编译Java JDK工具集并不是您时间的最佳利用方式。

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

像Azul Systems这样的供应商为当前版本19以及长期支持(LTS)版本8、11和17提供了适用于苹果芯片的构建程序。Java 17是最新的LTS版本,将在未来多年得到支持。因此,我建议部署Java 17。

我自己一直在几台M1 MacBook Pro笔记本上使用Java 17、18和19,以及早期访问的20版本,配合IntelliJ和Maven在Big Sur和Monterey上运行良好,没有问题。
更新:截至2023年11月,我建议使用最新的LTS版本21进行部署。此外,现在你可以从许多供应商(包括亚马逊、微软、Azul Systems、BellSoft、Oracle、Adoptium、SAP、IBM、Red Hat、Linux apt-get、FreeBSD Ports和Packages等)获取JDK二进制文件和安装程序。其中大多数供应商都提供适用于Intel Mac和Apple Silicon Mac的JDK产品版本。

编译Java

正如所评论的,你遇到的具体错误很可能是因为你在编译时选择了32位ARM而不是苹果的M1芯片M2芯片系列所使用的64位ARM架构。

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


1
非常感谢!我会考虑一下。 - rainbowecho
1
恕我直言,“不要尝试某事”是最糟糕的建议。构建OpenJDK确实很复杂,这点我们都同意。但是这种复杂性不应该阻止好奇心。 - Sergei Rybalkin
@SergeiRybalkin 我同意你的最后一句话。这就是为什么我在答案的结尾给出了一些提示的原因。 - Basil Bourque
@BasilBourque,您建议使用Rosetta 2吗?而不是专门为Silicon安装JDK? - Dr.jacky
1
@Dr.jacky 我不知道你的意思。虽然我听说Java在Rosetta 2下在Intel Mac上运行良好,但没有必要这样做。为了获得最佳性能,在使用Apple Silicon的Mac上,请使用为Apple Silicon(ARM,Aarch64)编译的Java版本。对于使用Intel芯片的Mac,请使用为Intel编译的Java版本。像Azul Systems这样的供应商为当前版本19以及长期支持(LTS)版本8、11和17提供了Apple Silicon版本。 - Basil Bourque

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

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

需要以调试模式编译jdk。可能要添加哪些选项?@ortamala - vkm

2

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


2
我已安装Android Studio版本,请参见截图enter image description here 在构建Flutter应用程序时,我遇到了问题(安装JAVA),因此我安装了JDK 17,但它不兼容。
我去了AZUL
我安装了第一个dmg文件。请参见截图enter image description here 这将解决使用M1 Mac构建Gradle和APK的问题。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接