windows上编译jdk

Windows上编译jdk21

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

环境准备

编译 jdk 需要 unix 环境, 在 windows 上可以使用 WSL 或 Cygwin.

建议修改系统语言为 英语(美国).

笔者这里使用 Cygwin, 建议安装64位的 Cygwin, 去官网下载安装包运行, 注意在选择软件包的时候, 左上角查看选择 完整, 搜索要安装的四个包:

  • autoconf
  • make
  • zip
  • unzip

新增项上选择最新版本.

image-20230701151823814

image-20230701151808004

然后是 MSVC 环境, 安装 Visual Studio 2022, 语言包加上英文, 建议不要修改安装路径.

如果已经安装过 Visual Studio, 加上英语语言包即可, 注意 Visual Studio 版本不能小于2019.

image-20230701152013869

image-20230701152100703

然后是准备 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显示时就不会是乱码了.

image-20240310141827312

执行:

# 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)
posted @ 2023-07-01 15:47  无以铭川  阅读(459)  评论(4)    收藏  举报