ubuntu20下編譯openjdk12及碰上的問題

在看周志明的《深入理解java虛擬機(jī)》羹幸,跟著教程編譯openjdk12,其中碰上點問題,所以記錄下來。

環(huán)境:ubuntu20

首先安裝gcc命令

sudo apt-get install build-essential

接著安裝以下依賴庫:

命令 工具
sudo apt-get install libfreetype6-dev FreeType
sudo apt-get install libcups2-dev CUPS
sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev X11
sudo apt-get install libasound2-dev ALSA
sudo apt-get install libffi-dev libffi
sudo apt-get install autoconf Autoconf
sudo apt-get install libfontconfig1-dev fontconfig

由于openjdk很多部分由java實現(xiàn)的衙荐,假設(shè)需要編譯的版本為N,需要裝一個版本號大于等于N-1的jdk浮创,我們需要編譯openjdk12忧吟,所以需要裝JDK11及之后的版本,命令如下:

sudo apt-get install openjdk-11-jdk

接著開始編譯:

bash configure --enable-debug --with-jvm-variants=server

關(guān)于configure的命令可以參考 “bash configure --help”斩披。
到目前位置一切順利溜族,出現(xiàn)如下界面:

A new configuration has been successfully created in
/home/xiang/win_d/java/jdk12-06222165c35f/build/linux-x86_64-server-fastdebug
using configure arguments '--enable-debug --with-jvm-variants=server'.

Configuration summary:
* Debug level:    fastdebug
* HS debug level: fastdebug
* JVM variants:   server
* JVM features:   server: 'aot cds cmsgc compiler1 compiler2 epsilongc g1gc graal jfr jni-check jvmci jvmti management nmt parallelgc serialgc services shenandoahgc vm-structs zgc' 
* OpenJDK target: OS: linux, CPU architecture: x86, address length: 64
* Version string: 12-internal+0-adhoc.xiang.jdk12-06222165c35f (12-internal)

Tools summary:
* Boot JDK:       openjdk version "11.0.7" 2020-04-14 OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-3ubuntu1) OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-3ubuntu1, mixed mode, sharing)  (at /usr/lib/jvm/java-11-openjdk-amd64)
* Toolchain:      gcc (GNU Compiler Collection)
* C Compiler:     Version 9.3.0 (at /usr/bin/gcc)
* C++ Compiler:   Version 9.3.0 (at /usr/bin/g++)

Build performance summary:
* Cores to use:   4
* Memory limit:   7858 MB

接著執(zhí)行:

make images

就在我以為大功告成,準(zhǔn)備慶祝的時候垦沉,出現(xiàn)如下提示:

ERROR: Build failed for target 'images' in configuration 'linux-x86_64-server-fastdebug' (exit code 2) 
Stopping sjavac server

=== Output from failing command(s) repeated here ===
* For target hotspot_variant-server_libjvm_objs_arguments.o:
In file included from /usr/include/string.h:495,
                 from /home/xiang/win_d/java/jdk12-06222165c35f/src/hotspot/share/utilities/globalDefinitions_gcc.hpp:35,
                 from /home/xiang/win_d/java/jdk12-06222165c35f/src/hotspot/share/utilities/globalDefinitions.hpp:32,
                 from /home/xiang/win_d/java/jdk12-06222165c35f/src/hotspot/share/utilities/align.hpp:28,
                 from /home/xiang/win_d/java/jdk12-06222165c35f/src/hotspot/share/runtime/globals.hpp:29,
                 from /home/xiang/win_d/java/jdk12-06222165c35f/src/hotspot/share/memory/allocation.hpp:28,
                 from /home/xiang/win_d/java/jdk12-06222165c35f/src/hotspot/share/classfile/classLoaderData.hpp:28,
                 from /home/xiang/win_d/java/jdk12-06222165c35f/src/hotspot/share/precompiled/precompiled.hpp:34:
In function ‘char* strncpy(char*, const char*, size_t)’,
    inlined from ‘static jint Arguments::parse_each_vm_init_arg(const JavaVMInitArgs*, bool*, JVMFlag::Flags)’ at /home/xiang/win_d/java/jdk12-06222165c35f/src/hotspot/share/runtime/arguments.cpp:2472:29:
/usr/include/x86_64-linux-gnu/bits/string_fortified.h:106:34: error: ‘char* __builtin_strncpy(char*, const char*, long unsigned int)’ output truncated before terminating nul copying as many bytes from a string as its length [-Werror=stringop-truncation]
  106 |   return __builtin___strncpy_chk (__dest, __src, __len, __bos (__dest));
   ... (rest of output omitted)

* All command lines available in /home/xiang/win_d/java/jdk12-06222165c35f/build/linux-x86_64-server-fastdebug/make-support/failure-logs.
=== End of repeated output ===

No indication of failed target found.
Hint: Try searching the build log for '] Error'.
Hint: See doc/building.html#troubleshooting for assistance.

找了很久的原因煌抒,最后猜測是gcc版本問題。默認(rèn)安裝gcc9厕倍,重新安裝gcc7

sudo apt-get install gcc-7 gcc-7-multilib g++-7 g++-7-multilib

查看gcc和g++分別有那些軟件:

ll /usr/bin/gcc*
ll /usr/bin/g++*

最后將/usr/bin下面以下文件通過軟連接重新指向版本7

/usr/bin/gcc
/usr/bin/gcc-ar
/usr/bin/gcc-nm
/usr/bin/gcc-ranlib
/usr/bin/g++ 

此時 gcc及g++版本已經(jīng)將為7的寡壮,且版本9依舊保留,需要的時候通過軟連接隨時能改回去绑青。

接下來回到j(luò)dk的源碼目錄诬像,清除之前編譯生成的文件

make clean
make dist-clean

重新執(zhí)行編譯命令(這次用默認(rèn)參數(shù),和之前不太一樣):

bash configure

看到

Tools summary:
* Boot JDK:       openjdk version "11.0.7" 2020-04-14 OpenJDK Runtime Environment (build 11.0.7+10-post-Ubuntu-3ubuntu1) OpenJDK 64-Bit Server VM (build 11.0.7+10-post-Ubuntu-3ubuntu1, mixed mode, sharing)  (at /usr/lib/jvm/java-11-openjdk-amd64)
* Toolchain:      gcc (GNU Compiler Collection)
* C Compiler:     Version 7.5.0 (at /usr/bin/gcc)
* C++ Compiler:   Version 7.5.0 (at /usr/bin/g++)

其中C Compiler 和C++ Compiler 已經(jīng)使用Version 7.5.0的gcc和g++闸婴。
接著執(zhí)行

make images

編譯成功,測試命令:

build/linux-x86_64-server-release/jdk/bin/java -version

顯示:

openjdk version "12-internal" 2019-03-19
OpenJDK Runtime Environment (build 12-internal+0-adhoc.xiang.jdk12-06222165c35f)
OpenJDK 64-Bit Server VM (build 12-internal+0-adhoc.xiang.jdk12-06222165c35f, mixed mode)

大功告成芍躏。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末邪乍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌庇楞,老刑警劉巖榜配,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異吕晌,居然都是意外死亡蛋褥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進(jìn)店門睛驳,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烙心,“玉大人,你說我怎么就攤上這事乏沸∫穑” “怎么了?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵蹬跃,是天一觀的道長匙瘪。 經(jīng)常有香客問我,道長蝶缀,這世上最難降的妖魔是什么丹喻? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮翁都,結(jié)果婚禮上驻啤,老公的妹妹穿的比我還像新娘。我一直安慰自己荐吵,他們只是感情好骑冗,可當(dāng)我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著先煎,像睡著了一般贼涩。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上薯蝎,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天遥倦,我揣著相機(jī)與錄音,去河邊找鬼占锯。 笑死袒哥,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的消略。 我是一名探鬼主播堡称,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼艺演!你這毒婦竟也來了却紧?” 一聲冷哼從身側(cè)響起桐臊,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎晓殊,沒想到半個月后断凶,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡巫俺,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年认烁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片介汹。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡却嗡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出痴昧,到底是詐尸還是另有隱情稽穆,我是刑警寧澤,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布赶撰,位于F島的核電站舌镶,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏豪娜。R本人自食惡果不足惜餐胀,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望瘤载。 院中可真熱鬧否灾,春花似錦、人聲如沸鸣奔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挎狸。三九已至扣汪,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間锨匆,已是汗流浹背崭别。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留恐锣,地道東北人茅主。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像土榴,于是被迫代替她去往敵國和親诀姚。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,044評論 2 355