1. 概述 <<深入理解Java虛擬機--JVM高級特性與最佳實踐>>第一章就談到自己編譯jdk,來吧。 2. 編譯環境 VMware12 CentOS-7-x86_64-Everything-1611 3. 軟體準備 Bootstrap JDK: jdk-7u79-linux-x64.tar.gz ...
1. 概述
<<深入理解Java虛擬機--JVM高級特性與最佳實踐>>第一章就談到自己編譯jdk,來吧。
2. 編譯環境
VMware12
CentOS-7-x86_64-Everything-1611
3. 軟體準備
Bootstrap JDK: jdk-7u79-linux-x64.tar.gz
OpenJDK: https://jdk7.java.net/source.html
4. 編譯依賴
4.1 安裝alsa軟體包
yum -y install alsa-lib-devel
4.2 安裝 cups-devel
yum -y install cups-devel
4.3 安裝lib相關庫
yum -y install libX*
4.4 安裝gcc
yum -y install gcc gcc-c++
4.5 安裝freetype
4.5.2 安裝 rpm -ivh freetype-2.4.11-9.el7.x86_64.rpm
4.6 安裝ant
yum -y install ant
說明: 這時會將openjdk作為依賴進行安裝; 安裝完, java -version| ant -version看看
&& 使用ant.tar.gz解壓方式安裝 不要安裝配置jdk依賴
4.7 安裝libstdc++
yum -y install libstdc++-static
說明: 此安裝為解決編譯時出錯 ERROR: Cannot chcon libjvm.so
5. 環境變數配置 vim /etc/profile
export CLASSPATH
export JAVA_HOME
export LANG=C
export ALT_BOOTDIR=/usr/java/jdk1.7.0_76
export ALLOW_DOWNLOADS=true
export USE_PRECOMPILED_HEADER=true
export ARCH_DATA_MODEL=64
export HOTSPOT_BUILD_JOBS=4
export ALT_PARALLEL_COMPILE_JOBS=4
export SKIP_DEBUG_BUILD=false
export SKIP_FASTDEBUG_BUILD=true
export DEBUG_NAME=debug
export ALT_OUTPUTDIR=/usr/java/openjdk/build
6. 編譯檢查
make sanity
若輸出結果為:Sanity check passed
,表示設置正確
7. 執行編譯
make
8. 編譯時可能出現的其他問題
8.1 ./gamma: relocation error: /usr/java/jdk1.7.0_76/jre/lib/amd64/libjava.so:
刪除 /usr/java/openjdk/hotspot/make/linux/Makefile文件中 所有test_gamma
(vim Makefile-> /test_gamma查找->:%s/&& \.\/test_gamma//g替換所有)
8.2 Error: time is more than 10 years from present:
/usr/java/openjdk/jdk/src/share/classes/java/util/CurrencyDate.properties文件中所有時間改為近期
vim 指令 /20..-搜索-> i 修改 -> esc退出i -> n下一個位置 -> i 直到全部改完
8.3 其他
make clean 可以清一下之前編譯
9. 結果圖
10. debug版jdk
/usr/java/openjdk/build-debug/j2sdk-image下的內容為debug版jdk
將他覆蓋原oracle jdk作為系統jdk,配置環境變數JAVA_HOME CLASSPATH PATH