1. 程式人生 > >OpenJDK的編譯(Deepin15 平臺)

OpenJDK的編譯(Deepin15 平臺)

        一年前在ubuntu 14.04上編譯成功了jdk1.8,前不久換了deepin 15來用(可以用windows下面的幾個常用軟體和下載工具+Android原始碼編譯+商店配置好各種開箱即用的開發工具,沒理由回ubuntu了),jdk原始碼執行環境都沒有了,只能重新搞過。因為,deepin15及ubuntu 16.10這種高版本用ubuntu 14.04這種低版本編譯方法會出現各種問題,特別有些依賴問題只有deepin15/Debian高版本系列才會有,特此總結一下,供在deepin系統上以Java為業的網友做學習提高之用。

 OpenJDK的編譯分為四部分:1 下載原始碼,2 編譯環境準備,3 高版本Linux問題處理 4 編譯

一 下載原始碼

    1年前的話,我是直接到openJdk網站 http://download.java.net/openjdk/jdk8/ 去下載打包好的原始碼包,結果今天再去看的話,下載連結還是哪個,但點進去,已經被oracle這個貨給和諧了。所以,決定使用官方第二種方式,hg下載,類似git的下載方式,下載Jdk8的原始碼,方法如下:

 $sudo apt-get install mercurial -y
 $hg clone http://hg.openjdk.java.net/jdk8u/jdk8u/  
 $cd jdk8u
 $sh get_source.sh  
這裡會正式下載每個包的原始碼,大概是800多M,速度並不慢,看各位的網速吧。

二 編譯環境的準備
1) 設定環境變數
    首先,要說一下,構建openJDK要一個藥引,這個藥引叫boot jdk,這個工具一般已經整合在普通的jdk中了,所以,在這之前一定要安裝一個普通的JDK7到系統上(不能比jdk8高,也不能太低,只能是低一個版本,java的二進位制包安裝方法,這裡就不介紹了。~題外話,當今的程式語言版本基本都是用自家的低版本去編譯出來的),然後繼續在自家根目錄.bashrc裡邊新增以下變數。
程式碼
#build openjdk option
export SKIP_DEBUG_BUILD=false    
export SKIP_FASTDEBUG_BUILD=true    
export DEBUG_NAME=debug     
export LANG=C     
export ALLOW_DOWNLOADS=true 
export USE_PRECOMPILED_HEADER=true   

export BUILD_LANGTOOLS=true  
export BUILD_JAXP=true  
export BUILD_JAXWS=true  
export BUILD_CORBA=true  
export BUILD_HOSTPOT=true  
export BUILD_JDK=true  
BUILD_DEPLOY=false  

unset CLASSPATH    
unset JAVA_HOME

2)配置編譯環境
程式碼:
$cd jdk8u{jdk原始碼根目錄}
$sh configure 或者 bash configure
該過程會檢測構建環境是否符合要求,如有問題,它會給出提示。下面先給出我碰到的要安裝的庫檔案:

程式碼:
ubuntu和debian系統
$sudo apt-get install libxext-dev libxrender-dev libxtst-dev libxt-dev
$sudo apt-get install libcups2-dev
$sudo apt-get install libfreetype6-dev
$sudo apt-get install build-essential    
$sudo apt-get install ant
$sudo apt-get install xorg-dev
Fedora系統---沒錯,我還在Feodra上面試過,就下面安裝依賴庫不同,其他的一樣.
$sudo yum groupinstall "Development Tools"
$sudo yum install gcc-c++
$sudo yum install libXtst-devel libXt-devel libXrender-devel
$sudo yum install cups-devel
$sudo yum install freetype-devel
$sudo yum install alsa-lib-devel


後面可能,大部分還有繼續安裝的缺失的工具,都可以通過提示apt安裝即可。說一下deepin15/debian沒有的庫檔案安裝:
libX11-dev,這個庫是沒有的預裝的,庫裡也沒記錄。上網到debian庫找,
debian庫總地址,以後大家缺少包都可以上debian庫裡找。
https://www.debian.org/distrib/packages
libX11-dev地址:
http://mirrors.ustc.edu.cn/debian/pool/main/libx/libx11/libx11-dev_1.6.4-3_amd64.deb
下載後安裝
$sudo dpkg -i libx11-dev_1.6.4-3_amd64.deb

三 高版本Linux問題處理
在上面sh configure命令檢查機制跑通後,即無error資訊後,就可以處理高版本Linux編譯環境的問題。
程式碼
$cd cd jdk8u{jdk原始碼根目錄}
$gedit ./hotspot/make/linux/makefiles/gcc.make
查詢一個欄位WARNINGS_ARE_ERRORS = -Werror,找到後,把它註釋掉。

四 編譯
因為高版本的gcc不再支援stabs,make下要加點引數(DEBUG_BINARIES=true),同時在執行時,可能出現問題,最好把錯誤日誌打印出來。

程式碼
$make all DEBUG_BINARIES=true 2>&1 |tee build.log
接下來就是20多分鐘的等待,編譯出來的build檔案有3.3G大小,還是挺大的。

後記:
   想在Windows下嘗試編譯jdk原始碼的程式設計師網友可以試試以下方法,全網只有這兩個下面位分享了方法,而且第二位是參考第一位的,一定要安裝vs201X,因為要用到它的C++編譯器,過程真的非常複雜。
https://www.cnblogs.com/lighten/p/5906359.html
http://www.jianshu.com/p/e85f93cc74cb

enjoy~

附圖:


--編譯成功


---上面1.7.0_95是系統JDK版本,下面1.8.0-internal是使用原始碼編譯的JDK