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

    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)

相關文章
相關標籤/搜索