前言
最近在学习编译原理,想看一下java的编译器长成什么样,最好自己可debug一下源码,学习一下底层的知识.
由于我从来没有接触过openJDK
编译的相关内容,所有走了不少弯路,再次记录一下.
准备工作
1. 下载源码 openJDK下载地址
在git下载比较慢,我直接用网页下载了一个zip包,东西都是一样的,这个代码就是master上的最新代码,是还没有发布的版本,你也可以去tags下载比较稳定的版本.
2. 下载编译工具(openJDK官放推荐 cygwin) 下载地址:Cygwin
2.1 安装/注意安装目录不能有中文或者空格
这里一定要选择 完整 , autoconf,make,unzip,zip,gcc,g++ 这几个包是你必须要下载的
验证cygwin
是否安装成功,状态等于OK就代码成功了
cygcheck -c cygwin
3.下载visual studio C++(2019/2022) 这里我使用的是2022版本的 下载地址 适用于 Windows 的 Visual Studio C/C++ IDE 和编译器
开始编译
1.以管理员身份打开cygwin
,进入你下载的openJDK
目录
- 先说一下cygwin的目录结构
/cygdrive/d/workspace/code/java-workspace/jdk-master
cygdrive
是这个程序的前缀,/d
就是你本地电脑D盘,后面的就是你的openJDK
所在的目录了
2.编译命令
编译命令需要两个地址
- 本地jdk安装的位置
- visual studio c++ , 因为我的visual studio c++ 的安装目录存在空格,所以在这里我转义了一次.
# 转义前的路径 C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build
cygpath -d "C:\Program Files\Microsoft Visual Studio\2022\Professional\VC\Auxiliary\Build"
#转义后的路径: C:\PROGRA~1\MIB055~1\2022\PROFES~1\VC\AUXILI~1\Build
- 运行配置
bash configure \
--with-debug-level=slowdebug \
--with-native-debug-symbols=external \
--disable-warnings-as-errors \
--with-boot-jdk=/cygdrive/c/Users/84344/.jdks/openjdk-23.0.2 \ #本地JDK地址,编译JDK需要上一个版本的JDK
--with-tools-dir="/cygdrive/c/PROGRA~1/MIB055~1/2022/PROFES~1/VC/AUXILI~1/Build" \ #visual stuido C++ 安装目录,转义之后的地址
--with-toolchain-version=2022 \ #visual studio c++ 的版本
--with-toolchain-type=microsoft
如果报错:
configure: error: Target CPU mismatch. We are building for x86_64 but CL is for "版"; expected "x64".
configure exiting with result code 1
在JDK源码中找到generated-configure.sh文件,把这个if注释掉(这句话的意思是,校验你电脑的CPUr如果是x86_64,编译器应该生成64位的代码)
3.运行make
make images CONF=windows-x86_64-server-slowdebug
4.验证新建的JDK
./build/*/images/jdk/bin/java -version
5.运行基本测试
make run-test-tier1 CONF=windows-x86_64-server-slowdebug
如果你在编译的时候遇到问题欢迎给我留言!