在Ubuntu 16.04上編譯OpenJDK8的源代碼

本文將詳細介紹在Ubuntu16.04上對OpenJDK8進行編譯。html

一、準備編譯環境

使用的操做系統爲Ubuntu16.04,若是讀者沒有安裝Ubuntu,能夠在Windows上使用虛擬機的方式進行安裝,或者能夠直接在電腦上安裝多系統,這種方式比以虛擬機安裝的方式速度要快。Ubuntu操做系統使用的是Linux內核,因爲HotSpot是由C++編寫的,因此在編譯時須要Linux的編譯器GCC。java

OpenJDK使用的代碼管理工具爲Mercurial(hg),下載並安裝Mercurial後就能夠經過hg clone命令獲取OpenJDK8的源代碼了,相關的命令以下: linux

hg clone http://hg.openjdk.java.net/jdk8/jdk8 openjdk
cd openjdk
bash ./get_source.sh

使用Mercurial下載時速度相對較慢,能夠直接去相關網站上下載壓縮包,網址爲:http://download.java.net/openjdk/jdk8。筆者下載的壓縮包爲openjdk-8-src-b132-03_mar_2014.zip,使用以下命令對壓縮包進行解壓: bash

unzip openjdk-8-src-b132-03_mar_2014.zip

解壓後openjdk目錄下重要的目錄以下表所示。工具

 

openjdk中的README-builds.html網頁提供了編譯源代碼的相關說明。在Ubuntu操做系統下編譯能夠分爲兩步:網站

第一步,生成編譯配置的腳本 

生成編譯配置的腳本使用的命令以下: ui

bash ./configure  \
--with-target-bits=64 \
--with-boot-jdk=/usr/java/jdk1.7.0_80/ \
--with-debug-level=slowdebug \
--enable-debug-symbols ZIP_DEBUGINFO_FILES=0

運行這個命令對編譯的openjdk所須要的依賴進行檢查,若是終止,可根據對應的提示安裝相關的依賴。命令行選項--with-target-bits指定編譯64位系統的JDK; 命令行選項--with-boot-jdk指定引導JDK所在目錄,以防其餘安裝的JDK影響。構建JDK8須要使用JDK7 Update 7或更高版本的版本做爲引導JDK,但不該使用JDK8做爲引導JDK;命令行選項--with-debug-level=slowdebug,有這個選項,能夠在GDB等代碼調試過程當中提供足夠的信息;--enable-debug-symbols ZIP_DEBUGINFO_FILES=0生成調試的符號信息,而且不壓縮。spa

若是命令運行成功,會在當前目錄下生成一個目錄,目錄的名稱是根據要編譯的目標肯定的,如筆者Ubuntu 64位操做系統下生成的目錄名爲linux-x86_64-normal-server-slowdebug。操作系統

第二步,編譯 

編譯使用的命令以下:.net

make all ZIP_DEBUGINFO_FILES=0

若是命令運行成功,則成功編譯出了JDK。運行以下命令:  

./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version

輸出的信息以下:  

openjdk version "1.8.0-internal-debug"
OpenJDK Runtime Environment (build 1.8.0-internal-debug-mazhi_2019_08_12_20_52-b00)
OpenJDK 64-Bit Server VM (build 25.0-b70-debug, mixed mode)

在openjdk下建立一個Test.java源文件,內容以下: 

public class Test{
     public static void main(String[] args){
        System.out.println("Hello World!");
     }
}

經過Javac編譯器編譯如上的源代碼,獲得Test.class文件。

運行如上的Class文件,命令以下:

./build/linux-x86_64-normal-server-slowdebug/jdk/bin/javac Test.java
./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java Test

輸出以下的信息:  

Hello World!

 

關注我的博客www.classloading.com或公衆號,有HotSpot源碼剖析系列文章!

相關文章
相關標籤/搜索