编译环境以及依赖
macOS:Sierra,10.12.6
处理器:2.6 GHz Intel Core i7
内存:16 GB 2133 MHz LPDDR3
Command Line Tools (macOS Sierra version 10.12) for XCode: Version 9.2
Boot JDK: jdk1.8.0_131
安装Homebrew
homebrew是macOS 缺失的软件包管理器。安装指南参考官方网站。
安装Mercurial
$ brew install mercurial
安装mercurial,它是OpenJDK的版本管理工具,只是为了下载OpenJDK的源代码。如果实在不想安装这个奇怪的工具,可自行在github上找个人的OpenJDK fork repo,然后就可以使用Git工具了。
安装freetype
$ brew install freetype
我在编译的过程中没有进行这一步,如果遇到缺少freetype的错误可使用homebrew安装。
编译OpenJDK9
- 获取源代码
shell $ hg clone http://hg.openjdk.java.net/jdk9/jdk9 OpenJDK9 $ cd OpenJDK9 $ bash ./get_source.sh
- 编译配置
bash bash configure --disable-warnings-as-errors --with-boot-jdk=/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/
--disable-warnings-as-errors
:禁用将警告当做错误,避免因为警告而中断编译
--with-boot-jdk
: 指定Boot JDK的位置
- 编译OpenJDK
make all
但是遇到了两个问题,Google搜索后修改之后完成编译
shell error: ordered comparison between pointer and zero ('char *' and 'int') if (base() > 0) { ~~~~~~ ^ ~ 1 error generated.
-
shell error: ordered comparison between pointer and zero ('address' (aka 'unsigned char *') and 'int') if (Universe::narrow_oop_base() > 0) { // Implies UseCompressedOops.
两个是同等类型的错误,需要找到该文件,将表达式进行修改。
```c++
if (base() > 0) { ==> if (base() != NULL) {if (Universe::narrow_oop_base() > 0) { // Implies UseCompressedOops. ==> if (Universe::narrow_oop_base() != NULL) { // Implies UseCompressedOops.
```修改完成之后重新编译即可,该问题在使用Command Line Tools (macOS Sierra version 10.12) for XCode: Version 9.2的时候出现。参考资料:Xcode 9.0 (9A235) problems
打印编译后Java的版本
shell build/macosx-x86_64-normal-server-release/jdk/bin/java -version
shell openjdk version "9-internal" OpenJDK Runtime Environment (build 9-internal+0-adhoc.xiaoweiliu.jdk9) OpenJDK 64-Bit Server VM (build 9-internal+0-adhoc.xiaoweiliu.jdk9, mixed mode)