1. 程式人生 > 其它 >Ubuntu18.04編譯OpenJDK12

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 cleanmake dist-clean 清理目錄,才能確保新配置生效

configure成功後輸入make images執行整個OpenJDK編譯

筆者的虛擬機器共有4核,記憶體4 GB,大概編譯了7分鐘。中間編譯時失敗了一次,是因為第一個configure缺失依賴後,安裝依賴完沒有執行兩次clean就直接configure了。

OpenJDK原始碼的“build/配置名/jdk”目錄下即為OpenJDK的完整編譯結果。

檢視編譯好的Java版本:java -version