Ubuntu如何輕松編譯openJDK詳解
前言
花了三天在windows上搞openJDK,對(duì)bash本來(lái)就不熟,加上各種莫名依賴(lài)和腳本里的bug,身心俱疲。最后make all的時(shí)候產(chǎn)生一個(gè)莫名其妙的錯(cuò)誤說(shuō)什么有warning且-Werror置為了true,死活沒(méi)google到-Werror是什么鬼,只好作罷了。
今天本菜鳥(niǎo)突然想起來(lái),朕還有Ubuntu虛擬機(jī),權(quán)且一試,沒(méi)想到輕松成功。
平臺(tái):Ubuntu Version 5.1.30 (3.2.0-98-generic-pae #138-Ubuntu SMP Mon Jan 11 13:11:12 UTC 2016 i686 i686 i386 GNU/Linux)
步驟1:(按照《深入理解Java虛擬機(jī)》中的命令)一鍵下載依賴(lài)
sudo apt-get install build-essential gawk m4 libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev binutils libmotif3 libmotif-dev ant
這里寫(xiě)的不一定全,不過(guò)暫且先裝著,后面如果缺少什么依賴(lài)可以再按提示安裝,一個(gè)佛系程序員的一天就是見(jiàn)招拆招。
openJDK的源代碼有C++也有Java,所以需要一個(gè)Bootstrap JDK去編譯Java的部分。這個(gè)JDK通常是比你要編譯的openJDK早一個(gè)版本的官方JDK,這是官方的README-builds(在第二步中下載下來(lái)的源碼根目錄下)說(shuō)的:
...The general rule is that the bootstrap JDK must be an instance of the previous major release of the JDK.
每一個(gè)版本的README-builds中都會(huì)指明這一版的openJDK需要的Bootstrap JDK具體版本,比如openJDK8需要的是JDK7u7以上的版本,但不能是JDK8:

步驟2:下載源碼
sudo hg clone http://hg.openjdk.java.net/jdk8u/jdk8u-dev/ cd jdk8u-dev chmod 755 get_source.sh ./get_source.sh
用mercurial下載jdk8u的最新源碼。小伙伴如果想下載其它版本的源碼可以去這里browse: http://hg.openjdk.java.net/。這個(gè)下載過(guò)程大約三十分鐘。
如果不想用mercurial,也可以在這里下載zip包:http://jdk.java.net/java-se-ri/8 (在網(wǎng)頁(yè)偏下方RI source code那里):

我在windows上編譯是就是用這個(gè)zip包解壓編譯的,最后失敗了。在Ubuntu上我還是決定用mercurial下載,各路大神盡可不必理會(huì)。
步驟3:設(shè)置環(huán)境變量新建一個(gè)setup.sh,把以下的內(nèi)容拷貝進(jìn)去:
export LANG=C #BootStrap-JDK的安裝路徑,替換為自己bootstrap-JDK的路徑 export ALT_BOOTDIR=/usr/lib/jvm/java-7-oracle-1.7.0.80 export ALLOW_DOWNLOADS=true export HOTSPOT_BUILD_JOBS=8 export SKIP_COMPARE_IMAGES=true #要編譯的內(nèi)容,讀者可以根據(jù)需要自行選擇 export BUILD_LANGTOOLS=true #export BUILD_JAXWS=false #export BUILD_JAXP=false #export BUILD_CORBA=false export BUILD_HOTSPOT=true export BUILD_JDK=true export SKIP_COMPARE_IMAGES=true BUILD_DEPLOY=false BUILD_INSTALL=false #編譯結(jié)果存放的路徑,建議存放在openjdk源碼中build文件夾 export ALT_OUTPUTDIR=/usr/dev/jvm/openjdk/build #這兩個(gè)環(huán)境變量需要去掉,不然會(huì)出問(wèn)題 unset JAVA_HOME unset CLASSPATH
運(yùn)行
./setup.sh
設(shè)置一遍就好。
步驟4:進(jìn)行編譯
到下好的openJDK源碼的根目錄下運(yùn)行make,大概需要二三十分鐘。本來(lái)是應(yīng)該運(yùn)行make sanity的,但是我又碰到了這個(gè)錯(cuò)誤……

媽喲什么鬼,搜了一會(huì)無(wú)甚結(jié)果,于是雞賊的跳過(guò)了這一步直接運(yùn)行make,竟然成功了,成功后的輸出長(zhǎng)這樣:

總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
- OpenJDK源碼調(diào)試圖文教程
- 麒麟V10更換OpenJDK為Oracle JDK的方法
- docker安裝openjdk并運(yùn)行jar包的操作方法
- Docker 解決openjdk容器里無(wú)法使用JDK的jmap等命令問(wèn)題
- openjdk與Oraclejdk的區(qū)別
- 如何卸載linux自帶openjdk并安裝sun jdk
- 基于編譯虛擬機(jī)jvm—openjdk的編譯詳解
- yum安裝openJDK1.8后無(wú)法卸載的快速解決方法
- 在CentOS系統(tǒng)上安裝Java的openjdk的方法
- OpenJDK源碼解析之System.out.println詳解
相關(guān)文章
Linux切換用戶(hù)環(huán)境變量消失問(wèn)題及解決
這篇文章主要介紹了Linux切換用戶(hù)環(huán)境變量消失問(wèn)題及解決,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-08-08
nacos在linux下啟動(dòng)startup.sh報(bào)錯(cuò)問(wèn)題及解決
遇到Nacos啟動(dòng)錯(cuò)誤提示“Permission denied”,可通過(guò)執(zhí)行命令chmod u+x *.sh給予startup.sh執(zhí)行權(quán)限,解決權(quán)限問(wèn)題,啟動(dòng)成功,這是一種常見(jiàn)的解決Linux下腳本執(zhí)行權(quán)限問(wèn)題的方法2023-03-03
Linux INotif機(jī)制詳解及實(shí)例代碼
這篇文章主要介紹了Linux INotif機(jī)制詳解及實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-01-01
Centos系統(tǒng)服務(wù)器查看端口是否開(kāi)放的方法
本文介紹了在Centos系統(tǒng)服務(wù)器上如何查看端口是否開(kāi)放的方法,通過(guò)telnet命令可以輕松實(shí)現(xiàn)。這對(duì)于服務(wù)器管理員來(lái)說(shuō)非常重要,可以幫助他們及時(shí)發(fā)現(xiàn)端口問(wèn)題并進(jìn)行修復(fù)。2023-03-03
詳解如何在阿里云服務(wù)器部署程序并用域名直接訪問(wèn)
這篇文章主要介紹了詳解如何在阿里云服務(wù)器部署程序并用域名直接訪問(wèn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
ubuntu開(kāi)啟22端口的實(shí)現(xiàn)
這篇文章主要介紹了ubuntu開(kāi)啟22端口的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08
Centos7 mysql數(shù)據(jù)庫(kù)安裝及配置實(shí)現(xiàn)教程
這篇文章主要介紹了Centos7 mysql數(shù)據(jù)庫(kù)安裝及配置實(shí)現(xiàn)教程,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
linux中如何添加用戶(hù)并賦予root權(quán)限詳解
這篇文章主要先是給大家介紹了linux中如何添加用戶(hù)并賦予root權(quán)限,而后有詳細(xì)的介紹了Linux系統(tǒng)用戶(hù)組的管理,文中通過(guò)示例代碼介紹的很詳細(xì),相信對(duì)大家的理解和學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2016-11-11
阿里云LNMP 云服務(wù)器重啟后網(wǎng)站打不開(kāi)解決方法
購(gòu)入了阿里云云服務(wù)器之后,感覺(jué)十分滿(mǎn)意,特別是阿里云的“快照”功能,對(duì)于折騰帝來(lái)說(shuō)簡(jiǎn)直就是神器。云服務(wù)器隨便弄,弄壞了大不了一個(gè)“回滾快照”,秒秒鐘的事而已2013-06-06

