栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

macOS Big sur 11.6&XCode13+编译openJDK12

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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上对比最新代码,或者查看出问题代码所在文件的历史记录追寻问题原因。

验证

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/424572.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号