1. 程式人生 > >CentOS7下編譯OpenJDK8原始碼

CentOS7下編譯OpenJDK8原始碼

本來想自己編譯openJDK10的,結果編譯的時候遇到了一些問題,可能是機子的GCC版本問題吧(我猜要升級到5+),後來參考這篇文章完成了openJDK8的編譯。

最近在學習jvm,平時有關java虛擬機器的知識都是從別人的認識,或者書本中獲得,然而“紙上得來終覺淺,絕知此事要躬行”。想更深刻的認識jvm,還得自己親自去研究一番。於是利用工作之餘的時間自己編譯一套jdk。

編譯前注意問題

1、編譯openjdk時,需要提供一個啟動jdk,即boot JDK;
2、boot JDK需為當前編譯的openjdk的上一個版本。例如這裡編譯的openjdk8,就要用jdk7作為啟動jdk;
3、openjdk8跟之前的版本編譯方式不一樣,之前的版本是基於Ant 、ALT_*環境變數的編譯方式,而openjdk8開始則是”configure && make”模式。(詳細說明可以閱覽官方文件)

我用的JDK的小版本比下面,並且好像JDK1.7要不維護了

環境、工具的準備
OS:CentOS 7 64bit;
OpenJDK:openjdk-8u40;
Boot JDK:jdk-1.7.0.14;

啟動jdk的安裝在這裡就不贅述了,另外還要安裝一些類庫:

    yum groupinstall "Development Tools"  
    yum install libXtst-devel libXt-devel libXrender-devel  
    yum install cups-devel  
    yum install freetype-devel
yum install alsa-lib-devel
  • 1
  • 2
  • 3
  • 4
  • 5

可能以上類庫還不夠,但在以後的configure操作會有提示你缺哪些類庫或者哪些工具,然後根據提示一 一安裝好。

構建並編譯

//開啟要編譯的openjdk目錄
cd /usr/openjdk/openjdk-8u40-src-b25-10_feb_2015/openjdk
//生成配置資訊並構建編譯環境
bash ./configure --with-target-bits=64 --with-boot-jdk=/usr/java/MYBOOTJDK_1.7/ --with-debug-level=slowdebug --enable-debug
-symbols ZIP_DEBUGINFO_FILES=0 //開始編譯 make all ZIP_DEBUGINFO_FILES=0
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

以上的引數簡單作一些說明:
–with-target-bits=64 :指定生成64位jdk;
–with-boot-jdk=/usr/java/MYBOOTJDK_1.7/:啟動jdk的路徑;
–with-debug-level=slowdebug:編譯時debug的級別,有release, fastdebug, slowdebug 三種級別;
–enable-debug-symbols ZIP_DEBUGINFO_FILES=0:生成除錯的符號資訊,並且不壓縮;

若在configure過程中提示安裝工具,則在安裝完工具後執行make clean進行清理方可再次configure,否則會config不成功。

configure成功後執行make 編譯工作,這將是個漫長的等待過程,我編譯的時候總共花費了一個半小時,當看到以下資訊的時候,就意味著大功告成!

----- Build times -------
Start 2017-08-19 20:08:26
End   2017-08-19 22:03:37
00:04:32 corba
00:03:02 demos
00:20:23 docs
00:27:00 hotspot
00:05:30 images
00:01:45 jaxp
00:03:12 jaxws
00:43:27 jdk
00:04:01 langtools
00:02:15 nashorn
01:55:11 TOTAL
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

這裡的話我看java版本的路徑是這個:./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version

然後cd 到編譯後的openjdk目錄下的bin子目錄,熟悉吧?就是我們平時用的jdk下的bin目錄,然後執行熟悉的java -version,輸出如下:

[root@localhost bin]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
  • 1
  • 2
  • 3
  • 4

這樣以後就可以用自己編譯的jdk了!
編譯完jdk就結束了嗎?然而對jvm的學習,編譯jdk僅僅是一個開端,接下來就是除錯、學習jdk,開啟jvm之門,去探索java世界的奧祕!

相關推薦

CentOS7編譯OpenJDK8原始碼

本來想自己編譯openJDK10的,結果編譯的時候遇到了一些問題,可能是機子的GCC版本問題吧(我猜要升級到5+),後來參考這篇文章完成了openJDK8的編譯。 最近在學習j

centos7用核心原始碼單獨編譯安裝KVM模組

準備:linux系統版本:CentOS-7-x86_64-DVD-1708   (其他系統也可以,核心版本對應就行)        核心版本3.10.0-693.el7.x86_64 1、官網獲取相應版本的核心原始碼,連結:http://vault.centos.org/。

centos7編譯安裝lnmp和nginx代理實驗

ket orm pass glib href status log nal listen 1、先安裝mysql cd /usr/local/src wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux

Mac編譯JRTPLIB原始碼 For Android

一.工欲善其事必先利其器: 1.官網下載Jthread和Jrtplib 2.通過 "brew install ninja" 命令安裝ninja 二.解壓下載的Jthread與Jrtplib壓縮包並參考GitHub的文件編寫cmake檔案: 1.在Jthread解壓出的目錄下建立toolcha

詳解Centos7 編譯安裝Nginx和yum搭建Nginx兩種方法

Nginx 在併發與負載能力方面確實優於 apache,大多數網站都採用基於Nginx 來搭建網站。 下面就來介紹Nginx的搭建 一 原始碼安裝nginx 首先先來安裝Nginx,但是本地的yum倉庫中只有apache,並沒有Nginx,這就需要手動安裝了。 Nginx 的下載官網是這個http

JVM-Ubuntu18.04.1編譯OpenJDK8

[email protected]:~/jdk8u-dev/build/linux-x86_64-normal-server-release/jdk/bin$ ./java -version openjdk version "1.8.0-internal" OpenJDK Runtime E

ubuntu-12.04.5編譯openjdk8

    1、下載jdk1.7並配置相關環境變數 輸入如下命令開啟檔案:  gedit ~/.bashrc 在.bashrc檔案末尾假如如下語句: #java jdk configuration export JAVA_HOME=/usr/lib/j

android開發-Windows環境編譯FFMPEG原始碼

1.簡介 之前有兩篇文章講到如何在windowsPC端使用FFMPEG命令列程式。 但是我想要在android開發時使用FFMPEG的功能又該怎麼辦?所以就需要編譯FFMPEG,然後才能使用。這才有了這篇文章。 1.先講思路,2.後講具體流程! 但是首先有個問題就是我

Linux-Centos7 編譯安裝nginx (附nginx開機啟動指令碼)

1.安裝編譯所需環境: yum -y install gcc pcre pcre-devel zlib zlib-devel openssl openssl-devel 2.下載原始碼包(這裡用的是nginx-1.14.0) wget http://nginx.org/download/

windows編譯tensorflow原始碼 用其c++介面呼叫訓練好的模型

最近在研究如何用tensorflow的python庫訓練模型,生成pb檔案,再在c++中呼叫這個模型,完成前向的預測;所以就要使用其c++介面,這需要從原始碼編譯tensorflow。 根據官網給出的編譯器對應關係(詳見我的另一篇部落格),最新版(1.12版)的tensor

linux編譯lua原始碼

步驟: 1.下載lua包 wget -c http://www.lua.org/ftp/lua-5.3.4.tar.gz 2.解壓lua包 tar zxvf lua-5.3.4.tar.g

windows編譯 ffmpeg原始碼生成靜態庫用於Dev-C++工程

  1 set-Up 1.1.下載ffmpeg原始碼ffmpeg-4.0.2.tar.bz2,http://ffmpeg.org/download.html 解壓到 D:\04_project\ffmpeg\ffmpeg-4.0.2 1.2下載mingw 安裝程式 m

ArduPilot原始碼學習--(一)--MAC編譯ArduPilot原始碼

最近大半個月都在搞ardupilot的東東,我的測試機是一臺250的穿越機,Pixhawk 2.4.8的飛控(比較耐炸,機器剛到那天,測試時,由於GPS有問題,從大概6樓掉下來,四個槳葉的螺絲全掉了,槳葉也掉了兩個,把所有東西找回來重新安裝上,還是可以飛:))。 開始了我的ArduPilot

Linux編譯openJDK原始碼

學習《深入理解java虛擬機器》,開篇先編譯一個openJDK來了解JDK的原始碼。 書本你上提供了Mac OS和Linux系統下編譯openJDK的方法步驟,並且在windows系統下編譯openJDk也十分麻煩。 於是我就自己安裝了一個Linux系統的虛

Linux編譯Android原始碼問題彙總

前言         本人最近在研究Android原始碼編譯,現將編譯過程中遇到問題彙總於此。 環境         系統:CentOS 7 x86_64         源    :中科大映象源(詳見這裡) 問題彙總 (1)Increase Java heap s

centos7編譯mosquitto原始碼時,出現問題解決辦法

問題一:問題描述: 在centos7上編譯mosquitto原始碼時,出現以下問題: make[1]: 進入目錄“/home/jason/mosquitto-1.2/man” xsltproc mosquitto.8.xml warning: failed to loa

【工作經驗】centos7編譯gcc 7.2.0

1. 升級gcc到7.2 wget 'http://mirrors-usa.go-parts.com/gcc/releases/gcc-7.2.0/gcc-7.2.0.tar.gz' // 下載

CentOS7編譯安裝ffmpeg3.1.5

一、安裝依賴包 # yum -y install gcc glibc glibc-devel make nasm pkgconfig lib-devel openssl-devel expat-dev

Win7編譯mosquitto原始碼

在windows下編譯mosquitto原始碼使用的工具包括: 1、visual studio 2010(用vs .net 2003的編譯器時cmake會提示未識別的c或c++編譯器) 2、cmake 3.1.0(這裡是最新的版本,稍微舊一點的版本應該也可以) 3、mosq

CentOS7編譯Hadoop-2.7.2詳解

1.工具準備,最靠譜的是hadoop說明文件裡要求具備的那些工具。 到hadoop官網,點選source下載hadoop-2.7.2-src.tar.gz。 利用FileZilla上傳壓縮包到/opt/software/目錄下 在該目錄下,解壓到/opt/modu