Linux下編譯OpenJDK源碼

1. 我的環(huán)境

  • CentOS 7
  • JDK 1.7

一定要確保是Hotspot JDK盯质,不要是其他的JDK,比如JRocket,這個jdk是用于編譯我們的openJDK的表伦,即Bootstrap JDK,所以這個jdk的版本不能和要編譯的openJDK的版本差距過大慷丽。

2. 安裝依賴的軟件

yum install -y mercurial
yum install -y ant ant-nodeps
yum install -y libX11* libX*
yum install -y libXi-devel libXtst-devel libXt-devel freetype* 
yum install -y alsa-lib-devel cups-devel
yum install -y gcc gcc-c++

一定要確保上述軟件都已安裝成功蹦哼。

3. 下載計劃安裝的openjdk

依次運行以下命令:

hg clone http://hg.openjdk.java.net/jdk8u/jdk8u-dev
cd jdk8u-dev
chmod 755 get_source.sh 
./get_source.sh 

一開始是想編譯jdk7u,但編譯過程中出現(xiàn)了libjvm.so的問題盈魁,據(jù)說這就是OpenJDK 和 Bootstrap JDK 版本沖突引起的 BUG翔怎,可以將 JDK 版本改為 JDK6 最新版,或者將 OpenJDK 改為 OpenJDK8 來解決該問題杨耙,我選擇了后者赤套。

4. 準(zhǔn)備編譯腳本

在jdk8u-dev中新建一個build.sh文件,內(nèi)容如下:

#! /bin/bash
#設(shè)置語言
export LANG=C
#Bootstrap JDK的安裝路徑珊膜,必須設(shè)置
export ALT_BOOTDIR=/opt/jdk1.7.0_80
#允許自動下載依賴
export ALLOW_DOWNLOADING=true
#并行編譯的線數(shù)容握,設(shè)置和cpu的數(shù)量一致即可
export HOTSPOT_BUILD_JOBS=2
export ALT_PARALLEL_COMPILE_JOBS=2
#比較本次build出來的映像與先前版本的差異,這對我們來說沒有意義
export SKIP_COMPARE_IMAGES=true
#使用預(yù)編譯頭文件车柠,不加這個編譯會更慢一些
export USE_PRECOMPILED_HEADER=true
#指定要編譯的內(nèi)容
export BUILD_LANGTOOLS=true
export BUILD_HOTSPOT=true
export BUILD_JDK=true
export BUILD_JAXP=false
export BUILD_JAXWS=false
export BUILD_CORBA=false
#要編譯的版本
#export SKIP_DEBUG_BUILD=false
#export SKIP_FASTDEBUG_BUILD=true
export DEBUG_NAME=debug
#可以避開javaws和瀏覽器Java插件之類的部分build
BUILD_DEPLOY=false
#設(shè)置成false就不會build出包裝包剔氏,因為包裝包里有些奇怪的依賴
#但是即使不build出它也已經(jīng)能得到完整的JDK映像,所以還是別build它好了
BUILD_INSTALL=false
#編譯結(jié)果存放的路徑
export ALT_OUTPUTDIR=/opt/openjdk_8u172
#卸載環(huán)境變量竹祷,避免詭異的事情發(fā)生
unset JAVA_HOME
unset JRE_HOME
unset CLASSPATH
unset JAVA_OPTS

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

確保把所有可能影響編譯的JAVA_HOME谈跛、JRE_HOME、CLASSPATH塑陵、JAVA_OPTS環(huán)境變量都去掉感憾。

5. 開始編譯

編譯1.8跟之前版本的有些區(qū)別,需要先執(zhí)行configure:
bash ./configure
再執(zhí)行我們的shell腳本:
./build.sh
執(zhí)行開頭出現(xiàn)下列警告:

WARNING: You have the following ALT_ variables set:
ALT_PARALLEL_COMPILE_JOBS=2 ALT_BOOTDIR=/opt/jdk1.7.0_80 ALT_OUTPUTDIR=/opt/openjdk_8u
ALT_ variables are deprecated and will be ignored. Please clean your environment.
Building OpenJDK for target 'default' in configuration 'linux-x86_64-normal-server-release'

說明定義的這些ALT_開頭的環(huán)境變量在編譯1.8版本時都不需要了令花,有默認(rèn)的配置阻桅,編譯還是可以繼續(xù)下去凉倚,編譯完成:



但這樣得到的是release版,而我們需要的是可以調(diào)試的版本嫂沉,其實我們可以省略第4個步驟(如果已經(jīng)編譯完成稽寒,先刪除./build目錄),直接運行下面的命令:

bash ./configure --with-target-bits=64 --with-boot-jdk=/opt/jdk1.7.0_80/ --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FILES=0
make all ZIP_DEBUGINFO_FILES=0

--with-debug-level=slowdebug:指定可以生成最多的調(diào)試信息趟章;
--enable-debug-symbols ZIP_DEBUGINFO_FILES=0:生成調(diào)試的符號信息杏糙,并且不壓縮;

再次編譯成功:


找到j(luò)2sdk_image蚓土,測試我們的編譯結(jié)果:


如果大家不想編譯jdk8或遇到其他一些坑搔啊,可以參考這篇文章:OpenJDK編譯防入坑指南,如果確定就是要編譯jdk8北戏,就直接看這篇:CentOS上編譯OpenJDK8源碼 以及 在eclipse上調(diào)試HotSpot虛擬機源碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末负芋,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子嗜愈,更是在濱河造成了極大的恐慌旧蛾,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蠕嫁,死亡現(xiàn)場離奇詭異锨天,居然都是意外死亡,警方通過查閱死者的電腦和手機剃毒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門病袄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人赘阀,你說我怎么就攤上這事益缠。” “怎么了基公?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵幅慌,是天一觀的道長。 經(jīng)常有香客問我轰豆,道長胰伍,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任酸休,我火速辦了婚禮骂租,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘斑司。我一直安慰自己渗饮,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著抽米,像睡著了一般。 火紅的嫁衣襯著肌膚如雪糙置。 梳的紋絲不亂的頭發(fā)上云茸,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天,我揣著相機與錄音谤饭,去河邊找鬼标捺。 笑死,一個胖子當(dāng)著我的面吹牛揉抵,可吹牛的內(nèi)容都是我干的亡容。 我是一名探鬼主播,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼冤今,長吁一口氣:“原來是場噩夢啊……” “哼闺兢!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起戏罢,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤屋谭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后龟糕,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體桐磁,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年讲岁,在試婚紗的時候發(fā)現(xiàn)自己被綠了我擂。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡缓艳,死狀恐怖校摩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情阶淘,我是刑警寧澤秧耗,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站舶治,受9級特大地震影響分井,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜霉猛,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一尺锚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧惜浅,春花似錦瘫辩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽承绸。三九已至,卻和暖如春挣轨,著一層夾襖步出監(jiān)牢的瞬間军熏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工卷扮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留荡澎,地道東北人。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓晤锹,卻偏偏與公主長得像摩幔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鞭铆,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容