Centos7 下編譯 Openjdk8

本文主要介紹如何在 Centos7 下編譯 Openjdk8 源碼,《深刻理解java虛擬機》第二版網上好多 openjdk7 的帖子,編譯 jdk8 和 7 仍是有些差異的,好比你們常常提到的 make sanity 在 jdk8 源碼裏是沒有的,下面咱們一步步編譯 openjdk8。html

1 安裝Bootstrap JDK

這裏徹底按照官方的說明來的。java

1
yum install java-1.8.0-openjdk

而後 java -version 看下已安裝的 jdk 版本,確實是 1.8.0 哈linux

1
2
3
4
[root@45790fc652d5 ~]# java -version
openjdk version "1.8.0_141"
OpenJDK Runtime Environment (build 1.8.0_141-b16)
OpenJDK 64-Bit Server VM (build 25.141-b16, mixed mode)

2 下載openjdk1.8源碼

首先安裝 hd yum install hg,接着開始下載源碼,網絡很差的話,這個下載會特別慢!c++

1
2
3
hg clone http://hg.openjdk.java.net/jdk8u/jdk8u openjdk8
cd openjdk8
sh get_source.sh

3 安裝依賴

1
yum install alsa-lib-devel cups-devel libX* gcc gcc-c++ freetype-devel libstdc++-static ant make

4 編譯配置

切換到 openjdk8 目錄shell

1
2
chmod +x configure
./configure --enable-debug

5 編譯

直接在openjdk8下執行make,控制檯提示網絡

[root@45790fc652d5 openjdk8]# make
No CONF given, but more than one configuration found in /app/openjdk8//build.
Available configurations:
* linux-x86_64-normal-server-fastdebug
* linux-x86_64-normal-server-release
Please retry building with CONF=<config pattern> (or SPEC=<specfile>)
Makefile:55: *** Cannot continue.  Stop.

咱們只須要安裝提示從新 make CONF=linux-x86_64-normal-server-fastdebug 就好了, make 過程比較費時間,可能提出相似以下錯誤提示oracle

[root@45790fc652d5 openjdk8]# make
[Error] encoded value was less than 0: encode(-8.326673E-17, 5.0, 11.0, 16.0)
[Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)
[Error] encoded value was greater than 3: encode(15.029411, 1.0, 14.0, 15.0)
[Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)
[Error] encoded value was greater than 3: encode(15.029411, 1.0, 14.0, 15.0)
[Error] encoded value was less than 0: encode(-0.05882353, 1.0, 24.0, 25.0)

剛開始嚇了一跳,網上搜了下,這是個 bughttps://bugs.openjdk.java.net/browse/JDK-8016451 ,最後編譯成功會看到控制檯提示app

## Finished jdk (build time 00:03:56) ----- Build times ------- Start 2017-09-04 11:46:36 End 2017-09-04 12:02:25 00:00:31 corba 00:09:53 hotspot 00:00:21 jaxp 00:00:29 jaxws 00:03:56 jdk 00:00:38 langtools 00:15:49 TOTAL ------------------------- Finished building OpenJDK for target 'default' 

咱們再看下這個jdk的版本,果真和系統環境變量的不是一個哈less

[root@45790fc652d5 openjdk8]# build/linux-x86_64-normal-server-fastdebug/jdk/bin/java -version
openjdk version "1.8.0-internal-fastdebug"
OpenJDK Runtime Environment (build 1.8.0-internal-fastdebug-_2017_09_04_11_45-b00)
OpenJDK 64-Bit Server VM (build 25.71-b00-fastdebug, mixed mode)

6 代碼驗證

咱們寫一段簡單的 java 代碼分別在兩個 jdk 上編譯 javac 並運行 java 以獲取兩個 jdk 的信息,代碼以下ui

[root@45790fc652d5 ~]# cat JvmTest.java 
public class JvmTest { public static void main(String[] args) { System.out.println(System.getProperty("user.home")); System.out.println(System.getProperty("java.version")); System.out.println(System.getProperty("os.name")); System.out.println(System.getProperty("java.vendor.url")); } } 
  • 使用已安裝jdk
[root@45790fc652d5 ~]# javac JvmTest.java 
[root@45790fc652d5 ~]# java JvmTest      
/root
1.8.0_141
Linux
http://java.oracle.com/
  • 使用自編譯jdk
[root@45790fc652d5 ~]# openjdk8/build/linux-x86_64-normal-server-fastdebug/jdk/bin/javac JvmTest.java 
[root@45790fc652d5 ~]# openjdk8/build/linux-x86_64-normal-server-fastdebug/jdk/bin/java JvmTest      
/root
1.8.0-internal-fastdebug
Linux
http://java.oracle.com/
相關文章
相關標籤/搜索