macOS Big sur 11.6&XCode13+编译openJDK12

前言

     想要窥探Java虚拟机内部的实现原理,最直接的一个方式就是编译一套自己的JDK,通过阅读源码和打断点调试跟踪JDK源码来了解java的运作体系,虽然这样做门槛可能会高点,但总归比看各种各样的书籍更加贴近问题本质,刚开始我也觉得头大,万事开头难,迈出第一步之后,回过头看,其实很简单,很符合直觉和逻辑。

系统资料

在这里插入图片描述

编译前

安装工具&依赖

Xcode

在这里插入图片描述

Xcode command line tools

	 xcode-select --install

X11

安装x11,地址https://www.xquartz.org/
安装完之后,链接

ln -s /opt/X11/include/X11 /usr/local/include/X11

加速编译工具ccache

	brew install ccache

依赖的一个字体库 freetype

	brew install freetype

boot jdk

      要编译版本号为N的openJdk,至少要需要一个版本为N-1的的已经编译好的jdk,因此,需要安装好一个版本至少是11的jdk。
获取源码&切分支
从github上clonejdk的源码 ,然后cd到该目录,checkout tag为jdk8-b80的版本作为本地分支openjdk8

git clone https://github.com/openjdk/jdk
git checkout -b openjdk12+31 jdk-12+31

编译

配置

Running Configure

指定boot-jdk为jdk11所在目录

sh configure --with-debug-level=slowdebug  --with-boot-jdk=/Users/macbook/DevTools/JDK11/jdk-11.0.8.jdk/Contents/Home
配置成功

在这里插入图片描述

编译问题列表(针对 jdk-12+31分支)

缺少逗号

在这里插入图片描述

第一处

	 jdk/test/hotspot/gtest/logging/logTestUtils.inline.hpp

在这里插入图片描述

第二处

jdk/test/hotspot/gtest/logging/test_logFileOutput.cpp

图片中^位置加上逗号即可

类型问题

在这里插入图片描述

修改为下图所示

 jdk/src/hotspot/share/runtime/sharedRuntime.cpp

在这里插入图片描述

字符串定义问题

在这里插入图片描述

改为

jdk/src/hotspot/share/runtime/arguments.cpp

在这里插入图片描述

赋值问题

在这里插入图片描述

jdk/test/hotspot/gtest/classfile/test_symbolTable.cpp

注释掉s1=s1这行

Xcode13 兼容性问题

问题1
在这里插入图片描述

修改

jdk/src/java.base/unix/native/libjava/ProcessImpl_md.c

在这里插入图片描述
在这里插入图片描述

问题2
在这里插入图片描述

jdk/src/java.desktop/macosx/native/libjsound/PLATFORM_API_MacOSX_MidiUtils.c

在这里插入图片描述

在这里插入图片描述

少括号

在这里插入图片描述

 jdk/src/java.desktop/macosx/native/libawt_lwawt/awt/CSystemColors.m

在这里插入图片描述

编译成功

     修改完上述问题后,执行make images ,如果问题没有一次性修复完,每次修复完执行make images之前执行一次make clean,如果遇到其它问题,因为不同软件版本特别是xcode版本不同问题可能不同,可以到https://github.com/openjdk/jdk上对比最新代码,或者查看出问题代码所在文件的历史记录追寻问题原因。
在这里插入图片描述

验证

在这里插入图片描述

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值