macOS下編譯openjdk12所踩得坑

準備環境工具

在appstore上下載Xcode
通過xcode-select --install 命令安裝Command Line Tools for Xcode,驗證工具的辦法再執行此命令時會報此工具已安裝的錯誤。
這兩個SDK提供了OpenJDK所需的CLang編譯器以及M akefile中用到的其他外部命令。

進行編譯

進入openjdk源碼目錄,執行 bash ./configure 命令,如果有問題他會提醒你缺少什麼,像我他提醒我缺少autoconf,通過brew下載autoconf時報錯如下:

Error: Invalid formula: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/googler.rb
googler: uninitialized constant Language::Python::Shebang
Error: Invalid formula: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/sslmate.rb
sslmate: cannot load such file -- language/perl
Error: Invalid formula: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/kpcli.rb
kpcli: cannot load such file -- language/perl
Error: Invalid formula: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/percona-toolkit.rb
percona-toolkit: cannot load such file -- language/perl
Error: Invalid formula: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/whatmp3.rb
whatmp3: uninitialized constant Language::Python::Shebang
Error: Invalid formula: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/sql-translator.rb
sql-translator: cannot load such file -- language/perl
Error: Invalid formula: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/bear.rb
bear: uninitialized constant Language::Python::Shebang
Error: Invalid formula: /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core/Formula/ddgr.rb
ddgr: uninitialized constant Language::Python::Shebang
Error: Cannot tap homebrew/core: invalid syntax in tap!
Error: Failure while executing; `/usr/local/bin/brew tap homebrew/core` exited with 1.

搜素各種結果無果後,重裝下homebrew問題解決,國內重裝地址有知乎大佬提供方法:傳送門

成功安裝了autoconf後再執行編譯命令bash ./configure,報錯如下:

configure: error: No xcodebuild tool and no system framework headers found, use --with-sysroot or --with-sdk-name to provide a path to a valid SDK

執行如下命令:

sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer

再次執行編譯命令成功,某些參數根據自己需求進行添加

最後通過make images命令,發現報如下錯誤

/Users/xuhuajun/jdk12-06222165c35f/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.

將其報錯的文件中的s1 = s1註釋掉再進行編譯,成功!個人覺得這句代碼無用可註解掉

導入IDE

下載CLion工具,新建一個項目,選擇“New CM ake Project from Sources”,在源碼文件夾中填入
OpenJDK源碼根目錄,此時,CLion已經自動選擇好了需要導入的源碼,如下圖所示。點擊OK按鈕 就會導入源碼並自動創建好CMakeLists.txt文件。
在這裏插入圖片描述
這份自動生成的CMakeLists.txt並不能直接使用,OpenJDK本身也沒有爲任何IDE提供支持,但如 果只是爲了能夠在CLion中跟蹤、閱讀源碼,而不需要修改重新編譯的話,那直接在Run/Debug Configurations中增加一個CMake Application,然後Executable選擇我們剛纔編譯出來的FastDebug或者 SlowDebug版的java命令,運行參數加上-version或者某個Class文件的路徑,再把Before launch裏面的 Build去掉,就可以開始運行調試了,如下圖所示。
在這裏插入圖片描述

啓動測試
java.c的JavaMain爲工程的入口,debug模式下打斷點啓動,進行啓動測試。
在這裏插入圖片描述

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