在 Windows 上手动编译 JDK

本文迁移自笔者 CSDN 账号下文章

准备阶段:

  • 下载 openJDK13
  • 安装 cygwin (或 msys,以 cygwin 为例)

解压、阅读 README ,提示查看 doc/building.md,得知需要以下程序

  • autoconf
  • make
  • zip
  • unzip

Cygwin

根据提示,安装了 cygwin (一个可以在 Windows 上使用很多 Linux 命令的程序)。另外,除了默认的软件包之外,需要手动选择 make 和 autoconf ,下图为搜索安装 autoconf 的截图。如果安装漏了,可以补充安装。双击 Skip 变为版本号,再点击 Next 即可安装

csdn04.png

安装后,需要手动设置环境变量,将 cywin 的 bin 目录添加到 path 中,在完成后,可以在 cmd 中使用 Linux 命令。另外需要注意,在环境变量中,cywin (或msys) 需要在 PATH 中排在 C:\Windows\system32 前,如图

csdn05.png

JDK12 或 13

环境变量中的 JDK 版本必须为 JDK12 或 JDK13,这里使用 JDK13 来编译 openJDK13

VS Studio

需要安装 Microsoft Visual Studio 如果版本低于 16.00.30319.01. 会有警告

编译:

在 openJDK 根目录下,执行下列代码进行配置、检查环境

bash ./configure --disable-warnings-as-errors

如果配置成功,需要确保环境变量中 CLASSPATH 没有设定,可以通过以下命令暂时清除

set CLASSPATH=

再执行下列命令进行编译:

make

编译过程非常漫长,实测在同一台机器上(双系统)CentOS7 系统上编译速度比 Windows10 快了太多,而且遇到的问题也相对较少。编译完成后,应该会在控制台看到如下提示,同时退出编译:

Finished building target 'default (exploded-image)' in configuration 'windows-x86_64-server-release'

来到 build\windows-x86_64-server-release 目录下,可以看到 jdk 目录,它可以作为一个完整 JDK 使用。

csdn06.png

异常处理:

configure 阶段:

  • 显示 ?? is required

查询说是命令的问题,去 make/autoconf 目录下,有一个 toolchain.m4,打开,找到并注释掉相关的行即可:

搜索 Try setting --with-tools-dir 根据命令找到与自己报错信息匹配的语句块中的语句,注释掉即可。如图所示,这里注释掉条件为 xmicrosoft 语句块中的语句,因为编译时显示的是 Microsoft compiler

csdn07.png

  • 显示 Target CPU mismatch

同上文件中,搜索 Target CPU mismatch 注释掉与自己报错信息相同的 if 语句,注意是整个 if 语句,或者 将 AC_MSG_ERROR 改成 AC_MSG_RESULT,否则之后还会因为 if 语句块为空报错,注意 if 后的条件与控制台报错的条件需要吻合

make 阶段:

编译阶段出现错误,可以查找 build\windows-x86_64-server-release 目录下的 build.log 可以看到编译过程中控制台输出的信息,通常这部分的错误都会在最后看到如下提示:

ERROR: Build failed for target 'default (exploded-image)' in configuration 'windows-x86_64-server-release' (exit code 2)

  • 显示:语法错误:缺少“)”(在“]”的前面)...(如下图)

csdn08.png

根据错误提示,找到测试代码所在位置,将其注释掉即可。根据代码,应该是字符集上的问题

csdn09.png

  • 显示:警告被视为错误... (如图)

csdn0a.png

需要在进行 configure 时的 configure 命令后添加 --disable-warnings-as-errors 忽略警告