一次失敗的openjdk編譯經(jīng)歷

昨天在看《java虛擬機》的時候,想按照書中的介紹念颈,自己編譯一下openjdk泉粉,沒想到遠比書中描述的異常情況要多,而且在網(wǎng)上還沒能找到解決辦法,只能先放放了嗡靡。不管怎么樣跺撼,把經(jīng)歷記錄在這里,希望有高人幫忙出出解決辦法吧讨彼,先謝謝你們了哈歉井!

編譯環(huán)境1

  • BootStrap JDK:sun jdk1.7.0_80
  • centos 7
  • ant-1.8.0RC1

編譯環(huán)境2

  • BootStrap JDK:sun jdk1.7.0_71
  • centos 6.5
  • ant-1.8.0RC1

編譯過程

以上兩個環(huán)境的錯誤現(xiàn)象其實是一樣的,所以應該和centos的系統(tǒng)版本沒有關系哈误;

坑一

我下載了最新版的ant-1.10.1哩至,結果出現(xiàn)一個網(wǎng)上還沒有人說的一個異常,本著先達成目標的思想蜜自,果斷換到了1.8.0版本菩貌,同樣對應的jdk也從1.8換到了1.7。換了之后報的錯就和網(wǎng)上描述的錯一樣了重荠,往下看箭阶。

坑二

使用make sanity就能發(fā)現(xiàn)的兩個錯誤信息,缺少alsa包和cups包戈鲁,這種倒是是簡單仇参,按照下面的命令進行安裝即可

# 安裝alsa包
sudo yum install alsa-lib-devel
# 安裝cups-devel
sudo yum install cups-devel
# 可以直接安裝libX開頭的包
sudo yum install libX*

坑三

通過make sanity的檢查后,就可以使用一下腳本進行編譯了荞彼,這可是周志明大大出品

#語言選項冈敛,這個必須設置,否則編譯好后會出現(xiàn)一個HashTable的NPE錯
export LANG=C
#Bootstrap JDK的安裝路徑鸣皂。必須設置
#export ALT_BOOTDIR=/usr/java/jdk1.8.0_121
export ALT_BOOTDIR=/home/panyi/jdk1.7.0_80
#允許自動下載依賴
export ALLOW_DOWNLOADS=true
#并行編譯的線程數(shù),設置為和CPU內核數(shù)量一致即可
export HOTSPOT_BUILD_JOBS=8
export ALT_PARALLEL_COMPILE_JOBS=8
#比較本次build出來的映像與先前版本的差異暮蹂。這對我們來說沒有意義寞缝,
#必須設置為false,否則sanity檢查會報缺少先前版本JDK的映像的錯誤提示仰泻。
#如果已經(jīng)設置dev或者DEV_ONLY=true荆陆,這個不顯式設置也行
export SKIP_COMPARE_IMAGES=true
#使用預編譯頭文件,不加這個編譯會更慢一些
export USE_PRECOMPILED_HEADER=true
#要編譯的內容
export BUILD_LANGTOOLS=true
#export BUILD_JAXP=false
#export BUILD_JAXWS=false
#export BUILD_CORBA=false
export BUILD_HOTSPOT=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出它也已經(jīng)能得到完整的JDK映像,所以還是別build它好了
BUILD_INSTALL=false
#編譯結果所存放的路徑
export ALT_OUTPUTDIR=/home/panyi/openjdk/built/openjdk-7u40
#這兩個環(huán)境變量必須去掉棠枉,不然會有很詭異的事情發(fā)生(我沒有具體查過這些"詭異的
#事情"浓体,Makefile腳本檢查到有這2個變量就會提示警告)
unset JAVA_HOME
unset CLASSPATH
make 2>&1|tee $ALT_OUTPUTDIR/build.log

首先會報錯:/usr/bin/ld: cannot find -lstdc++;(centos6.5上沒有報這個錯)
這個還是缺少庫辈讶,使用命令安裝即可:

sudo yum install libc++ 
sudo yum install yum install libstdc++-static

這種錯還是簡單明了的命浴,安裝成功了以后,重新執(zhí)行腳本。

坑四

這個就比較坑了生闲,現(xiàn)象如下:

Using java runtime at: /usr/java/jdk1.7.0_76/jre
./gamma: relocation error: /usr/java/jdk1.7.0_76/jre/lib/amd64/libjava.so: symbol JVM_FindClassFromCaller, version SUNWprivate_1.1 not defined in file libjvm.so with link time reference
make[5]: *** [jvmg] Error 127

我只摘了一點點媳溺,重點是看到這個:./gamma: relocation error
萬能的stackoverflow上面有高人解答,編輯./hotspot/make/linux/Makefile碍讯,去掉所有的test_gamma悬蔽,我看到這個懵逼了,我直接將這個詞替換成功空后捉兴,發(fā)現(xiàn)報命令錯誤了蝎困;繼續(xù)找方法,發(fā)現(xiàn)把這個詞所在的行直接注釋掉才可以轴术。

坑五

Error: time is more than 10 years from present: 1120165200000难衰,這個網(wǎng)上的方法都是可用的,使用命令修改配置文件:vim find -name 'CurrencyData.properties'逗栽。將所有的年都改成十年以內即可盖袭。

坑六

/usr/bin/gcc  -g -O2   -fno-strict-aliasing -fPIC -W -Wall  -Wno-unused -Wno-parentheses -pipe -fno-omit-frame-pointer -D_LITTLE_ENDIAN   -DNDEBUG -DARCH='"amd64"' -Damd64 -DLINUX -DRELEASE='"1.7.0-internal"' -D_LARGEFILE64_SOURCE -D_GNU_SOURCE -D_REENTRANT -D_LP64=1 -I. -I/home/panyi/openjdk/built/openjdk-7u40/tmp/sun/npt/CClassHeaders -I../../../src/solaris/javavm/export -I../../../src/share/javavm/export -I../../../src/share/npt -I../../../src/solaris/npt   -Xlinker -O1 -Xlinker -version-script=mapfile-vers  -Wl,--hash-style=both -Xlinker -z -Xlinker origin  -Xlinker -rpath -Xlinker \$ORIGIN  -Xlinker -z -Xlinker defs -L/home/panyi/openjdk/built/openjdk-7u40/lib/amd64 -Wl,-soname=libnpt.so   -shared -o /home/panyi/openjdk/built/openjdk-7u40/lib/amd64/libnpt.so    /home/panyi/openjdk/built/openjdk-7u40/tmp/sun/npt/obj64/npt.o    /home/panyi/openjdk/built/openjdk-7u40/tmp/sun/npt/obj64/utf.o    /home/panyi/openjdk/built/openjdk-7u40/tmp/sun/npt/obj64/utf_md.o     -lc
/home/panyi/openjdk/built/openjdk-7u40/tmp/sun/npt/obj64/utf_md.o: In function `iconvConvert':
/home/panyi/openjdk/jdk/make/java/npt/../../../src/solaris/npt/utf_md.c:121: undefined reference to `libiconv'
/home/panyi/openjdk/built/openjdk-7u40/tmp/sun/npt/obj64/utf_md.o: In function `utfTerminate':
/home/panyi/openjdk/jdk/make/java/npt/../../../src/solaris/npt/utf_md.c:83: undefined reference to `libiconv_close'
/home/panyi/openjdk/jdk/make/java/npt/../../../src/solaris/npt/utf_md.c:86: undefined reference to `libiconv_close'
/home/panyi/openjdk/built/openjdk-7u40/tmp/sun/npt/obj64/utf_md.o: In function `utfInitialize':
/home/panyi/openjdk/jdk/make/java/npt/../../../src/solaris/npt/utf_md.c:65: undefined reference to `libiconv_open'
/home/panyi/openjdk/jdk/make/java/npt/../../../src/solaris/npt/utf_md.c:69: undefined reference to `libiconv_open'
collect2: ld returned 1 exit status
make[4]: *** [/home/panyi/openjdk/built/openjdk-7u40/lib/amd64/libnpt.so] Error 1
make[4]: Leaving directory `/home/panyi/openjdk/jdk/make/java/npt'
make[3]: *** [all] Error 1
make[3]: Leaving directory `/home/panyi/openjdk/jdk/make/java'
make[2]: *** [all] Error 1
make[2]: Leaving directory `/home/panyi/openjdk/jdk/make'
make[1]: *** [jdk-build] Error 2
make[1]: Leaving directory `/home/panyi/openjdk'
make: *** [build_product_image] Error 2

終極坑,求高人指點彼宠。還沒有在網(wǎng)上看到有人說編譯openJDK還需要iconv這個組件的鳄虱,也不想再去裝這個組件了,試著在npt的Makefile里面屏蔽iconv相關的命令凭峡,沒有找到有效的方法拙已。。摧冀。倍踪。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市索昂,隨后出現(xiàn)的幾起案子建车,更是在濱河造成了極大的恐慌,老刑警劉巖椒惨,帶你破解...
    沈念sama閱讀 222,681評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件缤至,死亡現(xiàn)場離奇詭異,居然都是意外死亡康谆,警方通過查閱死者的電腦和手機领斥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,205評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來沃暗,“玉大人月洛,你說我怎么就攤上這事∶枘溃” “怎么了膊存?”我有些...
    開封第一講書人閱讀 169,421評論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我隔崎,道長今艺,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,114評論 1 300
  • 正文 為了忘掉前任爵卒,我火速辦了婚禮虚缎,結果婚禮上,老公的妹妹穿的比我還像新娘钓株。我一直安慰自己实牡,他們只是感情好,可當我...
    茶點故事閱讀 69,116評論 6 398
  • 文/花漫 我一把揭開白布轴合。 她就那樣靜靜地躺著创坞,像睡著了一般。 火紅的嫁衣襯著肌膚如雪受葛。 梳的紋絲不亂的頭發(fā)上题涨,一...
    開封第一講書人閱讀 52,713評論 1 312
  • 那天,我揣著相機與錄音总滩,去河邊找鬼纲堵。 笑死,一個胖子當著我的面吹牛闰渔,可吹牛的內容都是我干的席函。 我是一名探鬼主播,決...
    沈念sama閱讀 41,170評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼冈涧,長吁一口氣:“原來是場噩夢啊……” “哼茂附!你這毒婦竟也來了?” 一聲冷哼從身側響起督弓,我...
    開封第一講書人閱讀 40,116評論 0 277
  • 序言:老撾萬榮一對情侶失蹤何之,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后咽筋,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,651評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡徊件,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,714評論 3 342
  • 正文 我和宋清朗相戀三年奸攻,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片虱痕。...
    茶點故事閱讀 40,865評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡睹耐,死狀恐怖,靈堂內的尸體忽然破棺而出部翘,到底是詐尸還是另有隱情硝训,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站窖梁,受9級特大地震影響赘风,放射性物質發(fā)生泄漏。R本人自食惡果不足惜纵刘,卻給世界環(huán)境...
    茶點故事閱讀 42,211評論 3 336
  • 文/蒙蒙 一邀窃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧假哎,春花似錦瞬捕、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,699評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至惧蛹,卻和暖如春扇救,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背赊淑。 一陣腳步聲響...
    開封第一講書人閱讀 33,814評論 1 274
  • 我被黑心中介騙來泰國打工爵政, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人陶缺。 一個月前我還...
    沈念sama閱讀 49,299評論 3 379
  • 正文 我出身青樓钾挟,卻偏偏與公主長得像,于是被迫代替她去往敵國和親饱岸。 傳聞我的和親對象是個殘疾皇子掺出,可洞房花燭夜當晚...
    茶點故事閱讀 45,870評論 2 361

推薦閱讀更多精彩內容

  • tags:hotspot categories:筆記 date: 2017-03-08 13:13:51 最近看了...
    行徑行閱讀 1,538評論 0 0
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,327評論 25 707
  • “為什么會這樣?明明早就已經(jīng)完成了今天的打卡作業(yè)苫费,只差一點汤锨!”心理懊悔. 好瞌睡,好瞌睡百框,寶貝終于睡啦闲礼,我的身體也...
    思齊_yang閱讀 62評論 3 0
  • 已有許久沒有觸碰那些鋪滿灰塵的往事,亦有許久不去回望熟悉場景铐维,還有幾個許久這些也成了塵埃柬泽? 忽然聽起了陳奕迅。聽了...
    聽雪吹花閱讀 268評論 0 0
  • 第二次進派出所被審訊 印象深刻 竟然有了敬業(yè)福 也算有所小安慰 畢竟工作這么艱難
    簡書2017閱讀 152評論 0 0