Mac下構建編譯OpenJDK12

前言:MacOS上構建OpenJDK 12。

前言:部分配圖取自《深入理解Java虛擬機》(第三版)。

OpenJDK12的環境&編譯&調試

1、獲取OpenJDK源碼

1.1、訪問https://hg.openjdk.java.net/jdk/jdk12/

1.2、點擊“browse”
image-20200529153422243

1.3、點擊“zip”,即可下載到本地,zip大概180M,解壓後大概600M。解壓後,我重命名爲jdk12image-20200529155956562

2、構建編譯環境

2.1、安裝XCode和Command Line Tools for Xcode

2.1.1、方法一

執行命令xcode-select --install,如果沒有提示如下內容,說明本地沒有安裝,順着流程安裝就行。
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-1a1Emu5A-1590903095188)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200529154917424.png)]

2.1.2、方法二(推薦)

將macos升級到最新版image-20200530204752479

訪問Apple Developer,下載image-20200530204619057
在AppStore裏下載image-20200530204706217

2.2、準備一個JDK11

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-xWx96UsS-1590903095189)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200530222527953.png)]
訪問adoptopenjdk,可下載OpenJDK11。外網很慢。

訪問huaweicloud,也可下載JDK11。我是用這個下的。記得在bash_profile裏配路徑。

2.3、安裝OpenJDK編譯依賴庫

brew install freetype

brew install autoconf

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-9UaM57LT-1590903095190)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200530154950378.png)]

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-F3XXqF4L-1590903095191)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200530155027429.png)]

brew install ccache

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Jlnx099C-1590903095192)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200530162853523.png)]

進入源碼目錄,執行bash ./configure

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-dPTi187C-1590903095193)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200530163647400.png)]

執行完bash ./configure,可看見目錄下自動新增了build文件夾image-20200530164032585
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Wbx4xXhI-1590903095194)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200530211225499.png)]

報錯:
error: No xcodebuild tool and no system framework headers found

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-mcItJ17i-1590903095195)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200530163823625.png)]

解決方式:

我網上找資料,試了很多方法,最後,我升級了更新了MacOS,重裝了xcode,見2.1.2、方法二。

而後執行

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer
問題解決。

在執行bash ./configure的時候,可能會有安全警告,在系統偏好設置>>安全與隱私>>通用裏允許訪問jdk11就行了。

看到下圖,就說明構建編譯環境成功了

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-uAkO2ma7-1590903095195)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200530230238625.png)]
此時build文件夾[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-PP3URrYu-1590903095196)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200530231129207.png)]

3、編譯

make images

image-20200530231656760

報錯:

* For target hotspot_variant-server_libjvm_gtest_objs_test_symbolTable.o:
/Users/mac/Desktop/JavaStudy/jdk12/test/hotspot/gtest/classfile/test_symbolTable.cpp:62:6: error: explicitly assigning value of variable of type 'TempNewSymbol' to itself [-Werror,-Wself-assign-overloaded]
  s1 = s1; // self assignment
  ~~ ^ ~~
1 error generated.

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-U1YQGD8I-1590903095197)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200530232650013.png)]

解決方式:

找到報錯的那行代碼,註釋掉。而後再make clean,再make images。
image-20200530234402012
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-fLc5hgh6-1590903095198)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200530234500239.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-RToxe6Mr-1590903095198)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200530235632825.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-lJDBtDXS-1590903095199)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200530235900182.png)]

問題解決。

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-vj4dp7iX-1590903095200)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200531000836781.png)]

4、用CLion調試

4.1、將OpenJDK12導入CLion

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-eKvIG94f-1590903095201)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200531073010017.png)]
image-20200531001210769

4.2、修改CMakeLists.txt(可跳過不看)

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-vZiKOkTZ-1590903095201)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200531073147675.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-KDhfhipN-1590903095202)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200531073204591.png)]
可是我在https://github.com/ojdkbuild/ojdkbuild/tree/master/src看到了jdk11、jdk13、jdk14,就是沒看到jdk12[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-n0YKuqwK-1590903095203)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200531074412974.png)]
於是我把jdk11和jdk13的CMakeLists.txt進行對比,發現不同之處後,我想過複製jdk13的CMakeLists.txt,然後把版本和路徑照葫蘆畫瓢地修改。奈何,我不知道${OJDKBUILD_DIR}是代表什麼,也不知道${PROJECT_NAME}_INSTALLER_UPDATE_UUID的值怎麼來的。所以我沒有修改CMakeLists.txt。講道理是要修改的,過段時間再看看。

4.3、調試

[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-5LvAQ6ek-1590903095209)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200531130038025.png)]
image-20200531130610933
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-UU0TdIgL-1590903095211)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200531131701258.png)]
[外鏈圖片轉存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-aJpgayK7-1590903095211)(/Users/mac/Documents/csdn草稿/JVM/OpenJDK的編譯環境&編譯/image-20200531131949652.png)]

恭喜,可以開始JVM探索之旅了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章