在 Windows x64 上构建 OpenJDK8

Building OpenJDK8 on Windows x64

所以我尝试从源代码编译 openjdk8,但在编译过程结束时遇到文件丢失问题...

这是我使用的软件:

以下是我正在阅读的手册:

有了所有这些指南,我可以让它编译,但是在 Building Images - 步骤中,我得到一个错误,指出一些文件丢失了(它们确实丢失了) ,这让我觉得在构建过程中出了点问题...

有几点我怕我做错了...

现在我使用的是cygwin 2.8版。 openjdk 配置脚本需要 cygwin 版本 >1.7 但无法识别 2.8 大于 1.7 并抛出一个错误,所以我调整了脚本(使构建工作像 2 个月前一样)...

我的配置命令如下所示:

./configure --disable-ccache --with-freetype=/cygdrive/c/freetype

也许我在这里需要更多参数才能使其工作(请注意,我已将自编译的 make 可执行文件复制到 cygwin bin 文件夹,因此我不需要提供其位置)

我宁愿尝试专业试用版,但再也找不到它了...(种子除外...)我有一种强烈的感觉,即 Express 版本不适合 openjdk 构建。我也遇到了缺少 ammintrin.h 文件的错误,但是通过在 Visual Studio 安装的包含文件夹中创建空头文件很容易解决这个问题。

我的基本搭建流程是:

  1. 安装以上所有软件
  2. hg 克隆 http://hg.openjdk.java.net/jdk8/jdk8
  3. ./get_source.sh
  4. ./configure --disable-ccache --with-freetype=/cygdrive/c/freetype`
  5. 制作干净的图像

然而,这里是如何结束的:

有人知道如何解决这个问题吗?

因此,在执行此任务几天后,我唯一的方法是忽略丢失文件的错误并继续提取文件...这导致 jdk 图像仍在工作,我目前正在使用它。我的猜测是错误来自 Oracle 引导 jdk。由于我正在编译一个 openjdk,它无法在其 headers 中找到 oracleJDK 文件,因此会产生错误。

因此,如果有人也遇到与我相同的错误,请尝试忽略丢失文件错误并继续构建图像。

我找到了正确的修复方法:使用 Cygwin 安装程序,将 Grep 降级到 2.27,这会正确忽略 CRLF 行结尾。

  1. 运行 Cygwin 设置(例如 setup-x86_64.exe
  2. 通过设置向导前进,直到您选择包
  3. 从“视图”下拉菜单中选择 "Full"
  4. 在搜索字段中输入 "grep"
  5. 单击“新建”列中的图标,直到它显示 2.x 版本(撰写本文时为 2.27)
  6. 单击“下一步”,然后单击“完成”。

我发现自己和你处于相同的位置,除了在我的情况下我需要 OpenJDK 构建是可重复的,所以 "run make repeatedly until it finishes" 不是一个可接受的解决方案。

通过一些试验,我找到了根本原因:

  • grep 失败,因为正在处理的文件有 Windows 行结尾 (CRLF)
  • Windows 行结尾是因为文件是由 Java 应用程序 (fixpaths) 生成的,它发出平台原生行结尾
  • 识别 fixpaths 让我找到了一个旧的 OpenJDK 电子邮件线程,该线程报告说一些用户遇到了同样的问题并通过降级解决了这个问题。

这让我产生了尝试降级 grep 的想法。我这样做了,它奏效了。