Mac上编译OpenJDK,遇到的各种问题及其解决方法。
最近在阅读《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》,所以……记录一次在编译OpenJDK12遇到的各种问题及解决方法。这过程,,不足为外人道也。。不多说,上干货!多事啊,刚上手的第一台Mac遇到15,变化了好多,遇到问题跟网上解决方式不一样。特别是zsh bash的区别。准备环境!这个直接同个App Store下载即可,而且它会自动添加安装Command Line Tools
在阅读《深入理解Java虚拟机:JVM高级特性与最佳实践(第3版)》,所以……
记录一次在编译OpenJDK12遇到的各种问题及解决方法。
这过程,,不足为外人道也。。不多说,上干货!
这是笔记本的信息。硬件环境
多事啊,刚上手的第一台Mac遇到15,变化了好多,遇到问题跟网上解决方式不一样。特别是zsh bash的区别。
一、准备环境!
这个直接同个App Store下载即可,而且它会自动添加安装Command Line Tools。
没有的话:
xcode-select --install
openjdk12源码下载
https://hg.openjdk.java.net/jdk/jdk12/,然后点击左边菜单中的“Browse”,将显示如图1-9的源码根目录页面。此时点击左边的“zip”链接即可下载当前版本打包好的源码,到本地直接解压即可。
请注意有大坑啊。要解压到系统卷,不要放在数据卷,会出现执行不了 ./configure —help 这个可执行文件。一开始个人以为是自己的命令行环境没配置好,一直报找不到这个文件,或者没有这个命令。
写的丑,别见怪,哈哈。
然后再搭建一个openjdk11环境来编译。
书中说法如下:
最后,假设要编译大版本号为N的JDK,我们还要另外准备一个大版本号至少为N-1的、已经编译好的JDK,这是因为OpenJDK由多个部分(HotSpot、JDK类库、JAXWS、JAXP……)构成,其中一部分(HotSpot)代码使用C、C++编写,而更多的代码则是使用Java语言来实现,因此编译这些Java代码就需要用到另一个编译期可用的JDK,官方称这个JDK为“BootstrapJDK”。编译OpenJDK 12时,Bootstrap JDK必须使用JDK 11及之后的版本。
地址下载安装
https://adoptopenjdk.net/?variant=openjdk11&jvmVariant=hotspot
安心安装吧。像我就拥有了jdk8和jdk11两个了。
二、编译过程
1、依赖环境
借助homebrew来安装
如果没有可以参考homebrew官网
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
2、主要安装三个依赖库
brew install ccache //加速编译
brew install freetype //字体引擎,编译过程中会被依赖到
brew install autoconf
3、检查环境
进入之前解压的jdk12的文件夹中
可以在doc文件夹下的build.html文件查看官方文档
configure后面参数的含义可以参考结尾处的参考
注意:
其中–with-freetype的值是上一步安装的freetype路径
可以通过brew list freetype的安装路径
–with-boot-jdk是之前安装的openjdk11的路径
bash ./configure --with-debug-level=slowdebug --with-jvm-variants=server --enable-ccache --with-freetype=/usr/local/Cellar/freetype/2.10.2 --with-boot-jdk=/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home --disable-warnings-as-errors
不行的话,报了以下:
configure: error: 'valid values for --with-freetype are ‘system’ and ‘bundled’
跟着改就得了。
解决方法:
不要尝试更改freetype的文件夹权限,直接把上述脚本中–with-freetype的值改为bundled即可。
bash configure --with-debug-level=slowdebug --with-jvm-variants=server --enable-ccache --with-freetype=bundled --with-boot-jdk=/Library/Java/JavaVirtualMachines/adoptopenjdk-11.jdk/Contents/Home --disable-warnings-as-errors
执行成功后出现下图。
三、编译
执行编译
make images
当这一步报了一个奇怪的错时,
Error: No CONF given, but more than one configuration found.
Available configurations in /Users/zhuchen/IdeaProjects/jdk12-06222165c35f/build:
* macosx-x86_64-server-release
* macosx-x86_64-server-slowdebug
Please retry building with CONF=<config pattern> (or SPEC=<spec file>).
请执行
//到build目录下删除不想要的。
//指定构建版本:
make images CONF=macosx-x86_64-server-slowdebug
好了,很好,千辛万苦到这了,请坚持。哈哈,开空调风扇给小脑脑散散热,这编译太烧脑了。
结束之后又如下提示:
Finished building target ‘images’ in configuration ‘macosx-x86_64-server-slowdebug’
检查一下哈
进入如下所示的jdk目录的bin文件夹中
执行./java -version
出现以下内容:
恭喜恭喜!你完成了Mac和OpenJDK12的双重考验,达到人生巅峰了。
以上仅供参考!不足之处敬请见谅!
更多推荐
所有评论(0)