1. 程式人生 > >Linux下編譯openJDK原始碼

Linux下編譯openJDK原始碼

學習《深入理解java虛擬機器》,開篇先編譯一個openJDK來了解JDK的原始碼。
書本你上提供了Mac OS和Linux系統下編譯openJDK的方法步驟,並且在windows系統下編譯openJDk也十分麻煩。
於是我就自己安裝了一個Linux系統的虛擬機器,下面主要記錄我安裝虛擬機器、以及編譯openJDK的完整過程。
主要系統環境和版本
系統版本:Ubuntu 16.04
openJDK版本: openjdk-7u40
JDK版本:1.7.0_79
1、虛擬機器的安裝
關於ubuntu虛擬機器的安裝步驟,網上有各種教程,這裡提供幾個連結,讀者可以根據以下連結教程,進行學習ubuntu虛擬機器的安裝。

http://jingyan.baidu.com/article/0320e2c1ef9f6c1b87507bf6.html
http://jingyan.baidu.com/article/14bd256e0ca52ebb6d26129c.html
1.1疑難雜症解決方案
1、安裝好後的虛擬機器不能上網?
在虛擬機器設定中進行NAT設定就可以了。
這裡寫圖片描述
2、虛擬機器終端如何開啟?
進入虛擬機器介面,使用快捷鍵 Ctrl+Alt+T 快捷開啟虛擬機器終端程式!
這裡寫圖片描述
3、 如何將主機中的檔案貼上到vmware虛擬機器
虛擬機器–>設定
這裡寫圖片描述
2、ubuntu虛擬機器下載並編譯執行openJDK
以下操作基本上使用ubuntu終端進行下載安裝。
具體參考網址如下:
http://openjdk.java.net/install/index.html

2.1下載openJDK(選擇的下載版本是openJDK1.7)

$ sudo apt-get install openjdk-7-jre
執行該命令列之後,出現如下問題
Package openjdk-7-jre is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
剛剛開始玩linux,這個不知道如何解決,於是就講主機中下載的openJDK原始碼手動拷貝進了Ubuntu系統中。
安裝gcc、g++、make等
sudo apt-get install build-essential    
安裝ant 1.7以上
sudo apt-get install ant
安裝XRender
sudo apt-get install libxrender-dev
sudo apt-get install xorg-dev
安裝alsa
sudo apt-get install libasound2-dev (daozhe)
Cups
sudo apt-get install libcups2-dev
安裝零碎的工具包
sudo apt-get install gawk zip libxtst-dev libxi-dev libxt-dev

在安裝ubuntu的時候,發現系統自帶了JDK1.8版本,感覺編譯openJDK1.7可能會有異常,於是就自行安裝了JDK1.7版本
安裝步驟可以參照以下部落格:
http://blog.csdn.net/gobitan/article/details/24322561
準備完環境,那麼我們就可以編譯原始碼了!
2.3準備編譯程式碼
1、要建立一個build.sh的指令碼檔案
可以選擇用命令列的方式來建立,也可以直接用圖形化介面進行建立,因為對linux命令列比較陌生,所有選擇手動進行建立。
在檔案中編輯如下內容:

 #!/bin/bash  
 #設定語言  
  export LANG=C  
  export ALT_BOOTDIR=/usr/lib/jvm/jdk1.7.0/ 
  #允許自動下載依賴包  
  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  

  #要編譯的版本  
  export SKIP_DEBUG_BUILD=false  
  export SKIP_FASTDEBUG_BUILD=true  
  export DEBUG_NAME=debug  

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

  #把它設定為false就不會build出安裝包。因為安裝包裡有一些奇怪的依賴  
  #但即便不build出它也已經得到完整的JDK映象,所以還是不用build它  
  BUILD_INSTALL=false  

  #存放編譯結果  
  export ALT_OUTPUTDIR=/home/lzl/openjdk/build  

  unset CLASSPATH  
  unset JAVA_HOME  
  make 2>&1 | tee $ALT_OUTPUTDIR/build.log  

使用make sanity命令看build.sh會不會報錯。
出現以下問題
/usr/bin/gawk: not found

make[1]: Entering directory `/home/senrayi/work/project'
/bin/sh: 1: /bin/gawk: not found
make[1]: *** [setup] Error 127
make[1]: Leaving directory `/home/senrayi/work/project'
make: *** [loader] Error 2
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386

百度了一下gawk,也沒有弄太明白,好像也是個依賴的軟體吧。於是就進行下載

$ sudo apt-get install gawk

然後,還是一系列的報錯

Failed to fetch http://101.44.1.126/files/62300000049EC504/cdn.packages.deepin.com/deepin/pool/main/g/gawk/gawk_4.1.3+dfsg-0.1_amd64.deb  Writing more data than expected (398653 > 398064)

依舊下載不了gawk,這下想了個絕招,在主機上下載個ubuntu版本的gawk,手動進行安裝!
https://launchpad.net/ubuntu/+source/gawk
這下就可以通過編譯了。
這裡寫圖片描述
具體編譯時候遇到的問題,接下來會總結並分享的!