Windows 11 + WSL(ubuntu 20.04) + CLion(2022.3) 编译OpenJDK12

编译OpenJDK12

前言

学习《深入理解Java虚拟机:JVM高级特性与最佳实践(第三版)》,先编译一个OpenJDK12。
本人使用了WSL进行JDK编译,然后在CLion中调试。下方是各工具版本信息。
文章有些内容不是特别详细,尝试编译前请认真阅读书籍和相关资料。
工具版本信息

一、下载OpenJDK源码

# 1:访问https://hg.openjdk.java.net/jdk/jdk12/
# 2:点击“browse”
# 3:点击“zip”,即可下载到本地

二、编译OpenJDK

参考https://openjdk.org/groups/build/doc/building.html

1:安装编译所需的组件

提示,遇到下载安装慢可以将安装源更换为国内源
参考链接中External Library Requirements章节。

2:执行编译命令

# 我使用到的命令[进入到解压后的源码中执行]
1. bash configure --enable-debug --with-jvm-variants=server
# 执行完之后可能会有报错,根据提示信息安装缺少的组件即可。
2. make images
# 前言中的硬件配置编译时长15分钟,执行过程可可能会报错,我在编译时的报错原因是gcc版本太高引起的,重新安装了gcc7,可作参考

3:验证编译结果

# 第二条命令正常执行后,可以用第三条命令验证结果,出现OpenJDK提示则表示正常。
3. ./build/*/images/jdk/bin/java -version

三、在Clion中调试OpenJDK源码

1:Clion中配置信息

提示,配置中所有的目录都选wsl的相对地址,不选驱动盘符下的绝对地址
Toolchains
CustomBuildTargets
Run?debugConfigurations

2:运行Debug进行调试

根据第一步的配置信息都添加好之后,就可以进行Debug了,找到src/java.base/share/native/libjli/java.c文件,进入JavaMain方法,打断点,开始执行。
调试结果

2:去除调试sigsegv segmentation fault问题

# 编辑.gdbinit文件
vim ~/.gdbinit
# 写入内容后:wq保存
handle SIGSEGV nostop noprint pass
handle SIGBUS nostop noprint pass
handle SIGFPE nostop noprint pass
handle SIGPIPE nostop noprint pass
handle SIGILL nostop noprint pass
# Clion中重新编译就不会出现sigsegv segmentation fault。

版权声明:本文为zixiao_love原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。