歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> 學習Linux >> CentOS7下編譯OpenJDK源碼

CentOS7下編譯OpenJDK源碼

日期:2017/3/6 9:46:13   编辑:學習Linux

CentOS7下編譯OpenJDK源碼


CentOS7下編譯OpenJDK源碼


在Centos7下自己編譯openjdk源碼,openjdk
具體步驟:

  • 獲取openjdk源碼
  • 安裝openjdk6–BoostrapJK
  • 安裝編譯時的依賴
  • 配置環境變量
  • 編譯

1. 獲取openjdk源碼

可以到這裡去下載,OpenJDK Source Releases
我下載的是openjdk-7u40版本,openjdk7,update40,build43

2. 下載jdk6–BoostrapJDK

我使用jdk6來輔助編譯。可以到oracle官網下載,jdk-6u45-linux-x64.bin

3.安裝編譯時的依賴

可以使用以下命令一次安裝完成

yum -y install build-essential gawk m4openjkd-6-jkd libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-devxllproto-print-dev binutils libmotif3libmotif-dev ant

3.配置環境變量,編譯

OpenJKD在編譯時讀取的環境變量很多,但是大多數都有默認值,必須設置的只有兩個:LANG和ALT_BOOTDIR。分別為C跟bootJDK的路徑
所有的環境變量可以使用下面的腳本設置:

export LANG=C#Bootstrap JDK 安裝位置export ALT_BOOTDIR=/opt/openJDK/jdk1.6.0_45#允許自動下載export ALLOW_DOWNLOADS=true#並行編譯的線程數,和CPU內核數量一致即可export HOTSPOT_BUILD_JOBS=2export ALT_PARALLEL_COMPILE_JOBS=2#比較本次build出來的映像與先前版本的差異,對於我們沒喲意義,#必須設置為falseexport SKIP_COMPARE_IMAGES=true#使用預編譯頭文件,不加這個編譯會更慢一些export USE_PRECOMPILED_HEADER=true#要編譯的內容export BUILD_LANGTOOLS=trueexport BUILD_HOTSPOT=trueexport BUILD_JDK=true#把它設置為false,可以避開javaws和浏覽器java插件的buildBUILD_DEPLOY=false#把它設置為false就不會build出安裝包。因為安裝包裡有些奇怪的依賴BUILD_INSTALL=false#編譯結果所存放的路徑export ALT_OUTPUTDIR=/opt/openJDK/openjdk/build#這兩個變量必須去掉unset CLASSPATHunset JAVA_HOMEunset LD_LIBRARY_PATH

全部設置結束之後,可以輸入 make sanity 檢測是否正確,如果一切順利,會輸出:Sanity check passed.就可以編譯了。 輸入make(不加參數默認為make all),我的虛擬機配置比較低,整個編譯的過程用了一個多鐘。

結果如下:

我在虛擬機中編譯的,而且配置不高,所以有點慢.

那麼問題來了,如何看結果ne?

  編譯完成之後,進入OpenJDK源碼下的build/j2sdk-image目錄,(或者build-debug、build-fastdebug這兩個目錄),這是整個JDK完整編譯結果,內容為debug版jdk,將其復制到%JAVA_HOME%下,替換Oracle JDK。就可以作為一個完整的JDK使用,編譯出來的虛擬機,在-version命令中帶有用戶的機器名。

[root@localhost ~]# java -versionopenjdk version "1.7.0-internal-debug"OpenJDK Runtime Environment (build 1.7.0-internal-debug-root_2016_04_25_20_00-b00)OpenJDK 64-Bit Server VM (build 24.0-b56-jvmg, mixed mode)

  大多數情況我們只關心Hotspot虛擬機,只想單獨編譯它的話,那麼使用hotspot/make目錄下的MakeFile進行替換即可,其他參數與前面一致,這時候虛擬機的輸出結果存放在
build/hotspot/outputdir/linux_amd64_compiler2中,裡面對應了不同的優化級別的目錄。

進入 目錄jvmg,在運行虛擬機前,還要手工編輯目錄下的env.sh文件,這個文件由編譯腳本自動產生,用於設置虛擬機的環境變量,裡面已經發布了”JAVA_HOME,CLASSPATH,HOTSPOT_BUILD_USER” 3個環境變量,還需要增加一個“LD_LIBRSRY_CLASSPATH”:

{% codeblock lang:Java%}
LD_LIBRARY_PATH=.:JAVAHOME/jre/lib/amd64/nativethreads:{JAVA_HOME}/jre/lib/amd64:/opt/openJDK/openjdk/build/hotspot/outputdir/linux_amd64_compiler2/product
export LD_LIBRARY_PATH
{% endcodeblock %}

然後執行

. ./env.sh./gama -version   #有可能是test_gamma,這是自帶的一段八皇後代碼

結果如下

  自己編譯的虛擬機成功運行起來,哈哈哈~


編譯過程中有可能報錯:

Error: time is more than 10 years from present: 1104530400000 when building java/openjdk* lists.freebsd.org

通過修改CurrencyData.properties文件, 把10年之前的時間修改為10年之內即可
Index: /usr/openjdk/jdk/src/share/classes/java/util/CurrencyData.properties
把2006改掉就可以重新編譯了

參考文檔:
http://www.guinguo.top/2016/05/03/JVM%E5%AD%A6%E4%B9%A0%E4%B9%8BOpenJDK%E6%BA%90%E7

http://xxxxxx/Linuxjc/1134292.html TechArticle

Copyright © Linux教程網 All Rights Reserved