初次編譯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複製程式碼