在Centos7下自己編譯openjdk源碼,openjdk
具體步驟:
可以到這裡去下載,OpenJDK Source Releases
我下載的是openjdk-7u40版本,openjdk7,update40,build43
我使用jdk6來輔助編譯。可以到oracle官網下載,jdk-6u45-linux-x64.bin
可以使用以下命令一次安裝完成
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
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=.:
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