windows上编译jdk
Windows上编译jdk21
参考文档: https://openjdk.org/groups/build/doc/building.html
环境准备
编译 jdk 需要 unix 环境, 在 windows 上可以使用 WSL 或 Cygwin.
建议修改系统语言为 英语(美国).
笔者这里使用 Cygwin, 建议安装64位的 Cygwin, 去官网下载安装包运行, 注意在选择软件包的时候, 左上角查看选择 完整, 搜索要安装的四个包:
- autoconf
- make
- zip
- unzip
新增项上选择最新版本.


然后是 MSVC 环境, 安装 Visual Studio 2022, 语言包加上英文, 建议不要修改安装路径.
如果已经安装过 Visual Studio, 加上英语语言包即可, 注意 Visual Studio 版本不能小于2019.


然后是准备 boot-jdk: jdk 编译时需要另一个 jdk 提供支持, 该 jdk 称为 boot-jdk , boot-jdk 的版本要比想要编译的 jdk 的版本刚好低1个大版本. 例如 jdk8 可以作为 jdk9 的 boot-jdk.
如果当前环境变量中的 jdk 已经是你想要编译的版本的 boot-jdk 那就无需准备, 否则, 请去下载对应版本的 jdk.
最后, 下载 jdk 源码, 建议直接下载对应版本的 tag, 也可以 git clone https://github.com/openjdk/jdk.git, 然后 git checkout tag_name.
注意, 在windows上, git 默认启用 autocrlf, 会导致clone的源码中包含\r, 在编译时会报错.
编译
打开 Cygwin, 进入到要编译的 jdk 目录.
cd <jdk_source_root>
可以右键 Cygwin 的窗口右键 Options 设置文本的编码. 这样编译时输出的中文字符在Cygwin显示时就不会是乱码了.

执行:
# configure
bash configure \
--with-boot-jdk=D:/Softwares/Development/Java/jdk-20.0.1 \
--with-version-string=21+29-wymc \
--with-debug-level=slowdebug \
--with-boot-jdk-jvmargs="-Dfile.encoding=utf-8 -Duser.country=us -Duser.language=en" \
--with-extra-cflags=/utf-8 \
--with-extra-cxxflags=/utf-8
# build
make images
笔者这里想要编译 debug 版本在后续可以进行 debug, 因此增加了 --with-debug-level=slowdebug 参数, 后面参数调整编码避免编译时因为错误编码报错.
更多参数不一一列举, 读者可以通过 bash configure --help 以及翻阅官方文档.
经过漫长的编译后, build 目录下就将出现构建完成后的 jdk.
$ ./build/windows-x86_64-server-slowdebug/jdk/bin/java -version
openjdk version "21" 2023-09-19
OpenJDK Runtime Environment (slowdebug build 21+29-wymc)
OpenJDK 64-Bit Server VM (slowdebug build 21+29-wymc, mixed mode)

浙公网安备 33010602011771号