Ubuntu18.04編譯OpenJDK12
一、環境
VMware 16 下的 Ubuntu 18.04 LTS 虛擬機器
二、下載OpenJDK原始碼
官網下載(速度較慢):https://download.java.net/openjdk/jdk12/ri/openjdk-12+32_src.zip
堅果雲:https://www.jianguoyun.com/p/DYbYj_wQyMDKChjH378EIAA (訪問密碼:2sPTbZ)
三、構建編譯環境
安裝GCC或者CLang進行編譯,確保最低版本在GCC 4.8和CLang 3.2以上。
安裝GCC:
sudo apt-get install build-essential
下載依賴庫,見下表:
工具 | 安裝命令 |
---|---|
FreeType | sudo apt-get install libfreetype6-dev |
CUPS | sudo apt-get install libcups2-dev |
X11 | sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxtst-dev |
ALSA | sudo apt-get install libasound2-dev |
libffi | sudo apt-get install libffi-dev |
Autoconf | sudo apt-get install autoconf |
ps: Linux終端中貼上的快捷鍵為shift
+insert
在編譯JDK時,我們要另外準備至少低一個版本的已經編譯好的JDK。因為OpenJDK由HotSpot、JDK類庫、JAXWS、JAXP等部分組成,其中一部分HotSpot由C、C++編寫,而更多的程式碼則是用Java語言實現的,因此編譯這些程式碼需要另外一個編譯器可用JDK,稱為Bootstrap JDK。
安裝JDK 11:
sudo apt-get install openjdk-11-jdk
四、進行編譯
配置編譯引數:部分配置項見下表,其他引數可使用bash configure --help
檢視
配置項 | 描述 |
---|---|
--with-debug-level= |
設定編譯的級別,可選值有release、fastdebug、slowdebug。越往後進行的優化措施越少,帶的除錯資訊就越多。預設為release。 |
--with-version-string= |
設定編譯JDK的版本號,如當執行java -version的輸出就會顯示該資訊 |
--with-jvm-variants= |
編譯特定模式的HotSpot虛擬機器,可以多個模式共存。可選值有server、client、minimal、core、zero、custom |
--with-target-bits= |
指明要編譯32位還是64位的虛擬機器,在64位機器上也可以通過交叉編譯生成32位的虛擬機器 |
–enable-debug | 等效於–with-debug-level=fastdebug |
在解壓後的jdk目錄下開啟終端,輸入命令ll
後有bin、src等資料夾(本人將檔案解壓在了/home/java/openjdk12中)
編譯FastDebug版、僅含有Server模式的HotSpot虛擬機器:
bash configure --enable-debug --with-jvm-variants=server
若有依賴項缺失,configure會給出提示,按照提示執行完再次configure即可。
配置成功如下圖所示:
注:如果多次編譯,或目錄結構成功產生後又修改了配置,需要先make clean
和 make dist-clean
清理目錄,才能確保新配置生效
configure成功後輸入make images
執行整個OpenJDK編譯
筆者的虛擬機器共有4核,記憶體4 GB,大概編譯了7分鐘。中間編譯時失敗了一次,是因為第一個configure缺失依賴後,安裝依賴完沒有執行兩次clean就直接configure了。
OpenJDK原始碼的“build/配置名/jdk”目錄下即為OpenJDK的完整編譯結果。
檢視編譯好的Java版本:java -version