1. 程式人生 > 程式設計 >初次編譯openJDK8

初次編譯openJDK8

最近開始看《深入理解Java虛擬機器器》這一本書,這本書出版的時候Oracle還沒有推出JDK8,但是作者在1.5章節中對JDK發展的預測,還是很準確的,就像他函式語言程式設計,模組化等,當時看到這裡的時候就挺佩服作者的高瞻遠矚的,這幾點基本上都預測到了,看到這裡也讓我對這本書有了更多的興趣。

第一章的最後就是自己動手編譯OpenJDK,JDK7還是比較久遠了,直接來JDK8吧。

介紹一下環境

  • 系統是 centos7
  • Bootstrap JDK 1.8
  • OpenJDK 1.8

因為是頭一次編譯openjdk,所以選擇自己的伺服器作為環境。之前我在這臺伺服器上已經安裝過了JDK8,正好就可以用來做我的BootStrap jdk了。(linux安裝jdk8就不介紹了。)

BootStrap JDK是openjdk的執行jdk,因為openjdk是用java寫的,java需要一個環境來執行。

之前使用

hg clone hg.openjdk.java.net/jdk8u/jdk8u jdk8u

這條命令去下載openjdk,但是後來查了一下 openjdk的目錄結構,發現我下的這個跟網上的不一樣,於是又換了一個。地址是:

pan.baidu.com/s/1dKrYOlx6… 密碼: r653

正確的目錄結構如下圖:

那麼下面去安裝所需要的東西。

安裝alsa包

yum install alsa-lib-devel

安裝cups-devel

yum install cups-devel

安裝X相關的庫

yum install libX* yum install xrender

安裝g++

yum install gcc gcc-c++

安裝freetype

yum install freetype

安裝ant

yum install ant yum install ccache

安裝好後設定環境變數

export JAVA_HOME=/usr/local/java/jdk1.8.0_161

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

export PATH=$PATH:$JAVA_HOME/bin


export LANG=C
unset JAVA_HOME
unset CLASSPATH

export ALT_BOOTDIR=/usr/local/java/jdk1.8.0_161
export ANT_HOME=/usr/bin/ant
export ALLOW_DOWNLOADS=true
export USE_PRECOMPILED_HEADER=true
export ARCH_DATA_MODEL=64
export HOTSPOT_BUILD_JOB=6
export ALT_PARALLEL_COMPILE_JOBS=6
export SKIP_DEBUG_BUILD=false
export SKIP_FASTDEBUG_BUILD=true
export DEBUG_NAME=debug
複製程式碼

這是我自己的環境變數。

然後執行configure檔案

chmod +x configure ./configure

接著編譯

make

第一次編譯的時候是用了hg下來的包,怎麼編譯都不對,到最後都是報錯。於是乎換了上面連結裡的jdk,第一次編譯也是有問題,但是第二次就好了。附圖如下。 evernotecid://C6FAA89E-4A5B-44D0-A821-BA0101E2FCEC/appyinxiangcom/11444250/ENResource/p176

那麼怎麼看是真的編譯好了呢? 用java -version 這個命令,並且跟sun jdk對比一下就知道了。 sun jdk: evernotecid://C6FAA89E-4A5B-44D0-A821-BA0101E2FCEC/appyinxiangcom/11444250/ENResource/p174

open jdk: evernotecid://C6FAA89E-4A5B-44D0-A821-BA0101E2FCEC/appyinxiangcom/11444250/ENResource/p175

openJDK到這裡就編譯好了,它的好處就是可以檢視全部的原始碼,甚至可以新增斷點去執行,更方便了我們研究JVM原理。

參考:

  https://www.cnblogs.com/mr-long/p/5841604.html
  https://www.jianshu.com/p/5db1131b3038複製程式碼