1. 程式人生 > >CentOS編譯OpenJDK

CentOS編譯OpenJDK

一、準備編譯環境

1、安裝alsa音效卡驅動包

yum install alsa-lib-devel



2、安裝cups-devel

yum install cups-devel



3、安裝X相關的庫

yum install libX*



4、安裝gcc編輯器

yum install gccgcc-c++



5、安裝freetype

由於系統是Centos的,所以從http://rpm.pbone.net/index.php3/stat/4/idpl/26641422/dir/centos_7/com/freetype-2.4.11-9.el7.x86_64.rpm.html下載rpm包

rpm –ivh freetype-2.4.11-9.el7.src.rpm


6、安裝libstdc

yum install libstdc++-static



7、安裝Ant,用於執行Java編譯程式碼中的Ant指令碼安裝包下載地址:http://ant.apache.org/bindownload.cgi

tar –zxvf apache-ant-1.10.1-bin.tar.gz

8、安裝1.7版本的JDK

從官網下載安裝包,使用filezila上傳到虛擬機器

解壓縮安裝包:gunzip jdk-7u79-linux-x64.gz


tar –xvf jdk-7u79-linux-x64.gz

修改環境變數

vim /etc/profile

在檔案末尾新增下面的命令

#set environment

JAVA_HOME=/usr/java/jdk1.7.0_79

CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar

PATH=$JAVA_HOME/bin:$PATH

export JAVA_HOME CLASSPATH PATH


儲存退出,執行source /etc/profile使環境變數立即生效

執行java –version驗證安裝是否成功


9、下載OpenJDK原始碼

https://www.mercurial-scm.org/release/centos7/RPMS/x86_64/

這裡選擇的是:openjdk-7u75-src-b13-18_dec_2014.zip

解壓縮:unzip openjdk-7u75-src-b13-18_dec_2014.zip

二、進行編譯

OpenJDK在編譯時讀取的環境變數有很多,但大多都有預設值,必須設定的只有兩個:LANG和ALT_BOOTDIR,前者是設定語言選項,必須設定為:

export LANG=C


否者在編譯前的驗證階段會出現一個HashTable空指標異常。另外一個ALT_BOOTDIR是Bootstrap JDK,因為OpenJDk的各個組成部分(Hostspot、JDK API、JAXWS、JAXP……),有的是用C++編寫的,更多的程式碼是用

JAVA語言自身實現的。因此編譯這些Java程式碼需要用到一個可用的JDK,官方稱這個JDK為“Bootstrap JDK”。

export ALT_BOOTDIR=/usr/java/jdk1.7.0_79


另外,之前設定的JAVA_HOME和CLASSPATH兩個環境變數在編譯之前必須取消,否則Makefile指令碼中檢查到有這兩個環境變數存在,會有警告提示。

unset JAVA_HOME

unset CLASSPATH


#允許自動下載依賴

export ALLOW_DOWNLOADS=true


#設定Ant的安裝路徑

export ANT_HOME=/root/apache-ant-1.10.1


#設定並行編譯的執行緒數,設定成和CPU核心數量一樣

export HOTSPOT_BUILD_JOB=4 
export ALT_PARALLEL_COMPILE_JOBS=4


比較本次build出來的映像和之前版本的差異,必須設定為false,否則sanity檢查會報缺少先前版本JDK的映像的錯誤提示。如果已經設定dev或者DEV_ONLY=true,這個不顯式設定也行。

export SKIP_COMPARE_IMAGES=true

#使用預編譯標頭檔案,不加這個編譯會更慢一些

export USE_PRECOMPILED_HEADER=true


# 64位jdk 
export ARCH_DATA_MODEL=64 

#要編譯的內容

export  BUILD_LANGTOOLS=true

#export BUILD_JAXP=false

#export BUILD_JAXWS=false

#export BUILD_CORBA=false

export BUILD_HOTSPOT=true

export BUILD_JDK=true

#要編譯的版本

#export SKIP_DEBUG_BUILD=false 
#export SKIP_FASTDEBUG_BUILD=true 
#export DEBUG_NAME=debug 

#把它設定成false可以避免javaws和瀏覽器Java外掛之類的部分的build

export BUILD_DEPLOY=false

#把它設定成false就不會build出安裝包,因為安裝包裡有些奇怪的依賴,但即便不build出它也已經能得到完整的JDK映像,所以還是別build它好了。

export BUILD_INSTALL=false

#編譯結果所存放的路徑

export ALT_OUTPUTDIR=/root/openjdk/build


編譯檢查

進入之前解壓縮的OpenJDK的根目錄執行:make sanity


檢查通過後,執行make開始編譯。我這裡報了一個錯


這是因為我這裡使用的Ant版本是1.10.1,應該對應1.8版本jdk,而現在使用的jdk是1.7的,所以需要重新下載1.9版本及以下的Ant。

下載Ant,上傳解壓縮後,執行export ANT_HOME= /root/apache-ant-1.9.9

然後重新執行make,報了下面的錯誤


解決方法是將CurrencyData.properties檔案中所有的時間改為10年以內。

cd openjdk/jdk/src/share/classes/java/util/

vim CurrencyData.properties


編譯完成後,輸出如下的日誌清單


配置debug版jdk

編譯完成後進入OpenJDK原始碼下的build/j2sdk-image目錄(或者build-debug、build-fastdebug這兩個目錄),這是整個JDK的完整編譯結果,複製到JAVA_HOME目錄,就可以作為一個完整的JDK使用,編譯出來的虛擬機器,在-version命令中帶有使用者的機器名。


修改JAVA_HOME變數為j2sdk-image的目錄



在大多數時候,如果我們並不關心JDK中HotSpot虛擬機器以外的內容,只想單獨編譯HotSpot虛擬機器的話(例如除錯虛擬機器時,每次改動程式都執行整個OpenJDK的Makefile,速度肯定受不了),那麼使用原始碼中/root/openjdk/hotspot/make目錄下的Makefile進行替換即可,其他引數與前面是一致的,這時候虛擬機器的輸出結果存放在/root/openjdk/build/hotspot/outputdir/linux_amd64_compiler2目錄中,進入後可以看見以下幾個目錄。


這些目錄對應了不同的優化級別,優化級別越高,效能自然越好,但是輸出程式碼與原始碼差距就越大,難於除錯,具體哪個目錄有內容,取決於make命令後面的引數。

在編譯結束後,執行虛擬機器之前,還要手工編輯/root/openjdk/build/hotspot/outputdir/linux_amd64_compiler2/jvmg目錄下的env.sh(find -name env.sh查詢檔案)檔案,這個檔案由編譯指令碼自動生成,用於設定虛擬機器的環境變數,裡面已經發布了“JAVA_HOME、CLASSPATH、HOTSPOT_BUILD_USER”3個環境變數,還需要增加一個“LD_LIBRARY_PATH”,內容如下:

LD_LIBRARY_PATH=.:${JAVA_HOME}/jre/lib/amd64/native_threads:${JAVA_HOME}/jre/lib/amd64

export LD_LIBRARY_PATH

source env.sh

然後執行以下命令啟動虛擬機器(這時啟動器為gamma),輸出版本號。

. ./env.sh

./gamma -version


相關推薦

CentOS編譯OpenJDK

一、準備編譯環境 1、安裝alsa音效卡驅動包 yum install alsa-lib-devel 2、安裝cups-devel yum install cups-devel 3、安裝X相關的庫 yum install libX* 4、安裝gcc編輯器 yu

CentOS 6.9 Minimal 編譯OpenJDK 7

建議 定向 mic emp nta 生效 reads TP lease 今天學習《深入理解Java虛擬機:JVM高級特性與最佳實踐》一書,並動手在Linux系統上編譯OpenJDK 7,初次搞不太順利,特記錄下編譯操作細節。 一、前期準備 約定:工具默認安裝目錄是/usr/

Centos 編譯安裝Apache subversion-1.9.7 + httpd 2.4.32

Subversion HTTPsvn是Subversion的簡稱,是一個開放源代碼的版本控制系統。一、下載安裝Subversion必要的源碼文件Apachewget http://mirrors.shu.edu.cn/apache/httpd/httpd-2.4.32.tar.gzSubversionwge

CentOS 編譯安裝 python 3.5

centos python 源碼安裝 CentOS 6自帶的python是2.6的,下面記錄下CentOS6源碼安裝python 3.5的過程 #wget https://www.python.org/ftp/python/3.5.2/Python-3.5.2.tgz #tar xf Python

centos 編譯內核

eabi root 官方 5.4 linux data com iyu none Linux內核源碼官方下載地址: https://www.kernel.org/pub/linux/kernel/ 系統:centos7.5 1、在官方下載自己需要的內核版本 例如:linux

CentOS 7上安裝並配置 Python 3.6 環境 超詳細的 Linux CentOS 編譯安裝python3 Linux下編譯安裝python3

前言 按照此方法安裝保證以下報錯什麼的統統都沒有! 基礎環境 系統:centos7.4 軟體:python3 Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connect

Java虛擬機器(JVM原始碼):編譯OpenJDK原始碼

為什麼要自己編譯JDK原始碼 作為一個搞技術的同學,如果想在技術這條路上走下去,還是多研究些本質性的東西,修煉下內功。尤其是現在JDK都出到10了,如果你沒有研究過,還是停留在之前的時代,那麼確實說不過去。做技術還是得有追求。 一、JDK和OpenJDK的異同點 關於兩者之間

linux 編譯openjdk失敗記

最近開始學習jvm虛擬機器的知識,第一章就是自己編譯一個openjdk,結果編譯時遇到一個問題,嘗試了好久都沒能解決,心累的不想再試了。所以打算先繼續往下學習,等以後如果有毅力再來試一試,另寫下這篇部落格謹記錄自己編譯openjdk失敗了的過程和遇到的錯誤。 一、安裝lin

Centos編譯OpenJDK7原始碼

一、寫在前面 1.Centos版本:CentOS Linux release 7.3.1611 (Core)  x86_64 2.ant版本:apache-ant-1.9.13  3.freetype版本:freetype-2.3.12 4.openjd

centos刪除openJDK,安裝jdk(離線版)及shell指令碼安裝

1.環境 jdk1.8.0_191 centos7.5 2.為什麼要用離線 很多客戶現場都不能聯通外網,只能進行離線安裝。這裡即將用兩種方式安裝jdk,一種是手動的離線安裝,一種是指令碼安裝。 3.手動安裝jdk 3.1 檢視jdk版本資訊 java -versi

centos 編譯安裝 mysql5.6

一、編譯安裝 Mysql 前的準備工作 安裝編譯原始碼所需的工具和庫 yum install gcc gcc-c++ ncurses-devel perl 安裝 cmake,從 這裡 下載原始碼並編譯安裝 wget http://www.cmake.org/f

centos 編譯報錯,缺少libssh2.so

報錯Log: /usr/bin/ld: cannot find -lssh2 collect2: ld returned 1 exit status   解決方式: 1.下載原始碼,wget http://www.libssh2.org/download

Centos編譯執行一個簡單的C++程式

I、準備工作: 1) 一個類UNIX系統,這裡選擇CentOS 7 2) 安裝gcc編譯器,方法很多,一種簡單的安裝方式:yum install gcc-c++   注:yum install g++ 會失敗,因為沒有g++這個包 安裝好後顯示如下: 3)建立測試

centos 編譯 python3.7

轉:https://www.cnblogs.com/kimyeee/p/7250560.html 1. 安裝依賴環境   # yum -y install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel

Linux下編譯openJDK原始碼

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

Mac 編譯 openjdk

一、編譯環境 1. MacOS High Sierra 10.13.2 2. XCode 9.4.1(Command Line Tools) 3. jdk版本:jdk7u71 網盤下載 或者通過官網下載 4. openjdk: jdk8u-dev 或者通過me

CentOS7手動編譯OpenJDK

1.首先下載一個OpenJDK的zip包,URL路徑為: http://hg.openjdk.java.net/jdk7/jdk7/jdk/ 挺不顯眼的;左側有個zip,點一下就會下載下來 2.在CentOS系統上安裝 yum -y install gcc gcc-c++

CentOS 編譯安裝 mysql

1、前期準備 1.1 環境說明: 作業系統: CentOS release 6.4 (Final) [檢視命令 cat /etc/redhat-release ] mysql : mysql-5.6.26 1.2 徹底刪除系統自帶mysql

win10-x64系統下編譯OpenJDK

win10-x64系統編譯OpenJDK 目錄 本文主要講解在win10環境下編譯OpenJDK遇到的問題和解決辦法,在此先宣告一下在windows系統上編譯OpenJDK會遇到一些很坑的問題,如果不介意系統的話還是推薦在Linux上編譯。

centos 編譯核心

編譯步驟:    1. make mrproper #清理上次編譯的現場      2. make menuconfig #配置核心      3. make #編譯核心及核心模組      4. make modules_install #將核心模組安裝到 /lib/modules      5.