Mac_OS_Sierra_10.12.6编译OpenJDK9

编译环境以及依赖

macOS:Sierra,10.12.6html

处理器:2.6 GHz Intel Core i7java

内存:16 GB 2133 MHz LPDDR3git

Command Line Tools (macOS Sierra version 10.12) for XCode: Version 9.2github

Boot JDK: jdk1.8.0_131shell

安装Homebrew

homebrew是macOS 缺失的软件包管理器。安装指南参考官方网站macos

安装Mercurial

$ brew install mercurial 安装mercurial,它是OpenJDK的版本管理工具,只是为了下载OpenJDK的源代码。若是实在不想安装这个奇怪的工具,可自行在github上找我的的OpenJDK fork repo,而后就能够使用Git工具了。bash

安装freetype

$ brew install freetype 我在编译的过程当中没有进行这一步,若是遇到缺乏freetype的错误可以使用homebrew安装。工具

编译OpenJDK9

  1. 获取源代码oop

    $ hg clone http://hg.openjdk.java.net/jdk9/jdk9 OpenJDK9 $ cd OpenJDK9 $ bash ./get_source.sh网站

  2. 编译配置

    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的位置

  3. 编译OpenJDK

    make all

    可是遇到了两个问题,Google搜索后修改以后完成编译

    1. error: ordered comparison between pointer and zero ('char *' and 'int') 
        if (base() > 0) { 
            ~~~~~~ ^ ~ 
      1 error generated.
    2. error: ordered comparison between pointer and zero ('address' (aka 'unsigned char *') and 'int') 
        if (Universe::narrow_oop_base() > 0) { // Implies UseCompressedOops.

      两个是同等类型的错误,须要找到该文件,将表达式进行修改。 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

  4. 打印编译后Java的版本

    build/macosx-x86_64-normal-server-release/jdk/bin/java -version
    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)
    ```   ​