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模式下打断点启动,进行启动测试。
在这里插入图片描述

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