openjdk8编译-WINDOW10-MSYS2

准备

  1. 源码下载:https://github.com/openjdk/jdk/tree/jdk8-b120
  2. MSYS2安装:https://www.msys2.org/
  3. jdk7安装:https://www.oracle.com/java/technologies/javase/javase7-archive-downloads.html
  4. Visual Studio Professional 2010:https://my.visualstudio.com/Download
  5. FreeType:https://github.com/ubawurinna/freetype-windows-binaries/tree/v2.13.2

编译过程

推测构建系统,检查所需工具,生成构建配置,制定构建输出目录
./configure ./configure --enable-debug --with-boot-jdk=/D/DevSoft/Java/jdk1.7.0_80 --with-freetype=/D/DevSoft/freetype/freetype-windows-binaries-2.13.2
  • 更多参数详见源码中的 README-builds.html
  • 顺利的话,./configure执行成功:

d20b10d3f6cd1ba771e77c575f6f39b.png

开始构建
make all
  • 更多参数详见源码中的 README-builds.html
  • 顺利的话,make 成功:

087065f66d0254746aedb334ae6ecb3.png

产物校验
  • 顺利的话,在 build\windows-x86_64-normal-server-fastdebug\images\j2sdk-image可以看到我们构建好的 jdk
    • 输出路径中的${windows-x86_64-normal-server-fastdebug}视构建系统和 ./configure参数而定
  • java -version看到构建好的 jdk 版本信息

2bfab16e0616b9bcddf252697b79974.png

问题

  • 可惜并不顺利,遇到了如下种种问题,好在都被我逐个攻破
zipcmp等工具缺失
  • 可能不止这两款工具,没有一一记录下来,./configure 会指出确实的工具
  • MSYS2 的包管理系统是 pacman,缺失工具可从 MSYS2 Packages 查找相关工具下载指令
不支持的操作系统(unsupported operating system)
  • MSYS2 有多套环境,默认环境是 **UCRT64**
  • 根据报错关键字,找到脚本源码,看到支持系统如下所示:

image.png

  • 配置环境变量 MSYSTEM=MINGW64,指定 CMD 下使用MINGW64环境
找不到 Visual Studio

91560d9ade4b22cc3b0c95c40806ce2.png

  • 遇到此问题是我自以为是了,以为有 Visual Studio 2019 就可不安装 Visual Studio 2010
  • Visual Studio 2010 安装后会配置 VS100COMNTOOLS 环境变量,./configure 会根据次变量查找 Visual Studio
  • 看以下报错,好像可以使用 --with-tools-dir 配置 Visual Studio,用此配置指向 Visual Studio 2019是否可以?答案是不行的,Visual Studio 2019 目录建构与 Visual Studio 2010 目录结构不相同,./configure无法找到所需工具
  • 此处还有一坑,readme 中表示可以下载 Express 版本,可是 Express 版本缺少 vcvars64.bat,无法编译 64 位 jdk。

image.png

显示 cmd 窗口关键字,并提示 Cannot continue

0e56899a80f64dfc8f60813ab8ec61e.png

  • 提示找不到 vcvars64.bat,但神奇的是,顺着提示的目录找过去,是可以找到此文件的
  • 根据报错关键字,找到问题脚本源码:

image.png

  • 该段脚本会将包含 -_/:a-zA-Z0-9 之外字符的路径替换位 DOS-style 风格路径
  • **该脚本出问题时因为 ****MSYS2**的隐式路径风格替换,详见 MSYS2 - Filesystem Paths
    • 会自动将类 Unix 路径替换位 Window 路径,如:/c–> c:

image.png

  • 后面查到可使用 //c代替 /c 解决此问题

image.png

  • 但执行脚本中替换位 DOS-style路径的脚本还是有问题,如下所示,显然不是 DOS-style路径,使用 //c无法根除问题。该如何处理呢?

image.png

  • 想破脑袋也想不通啊!那我们换种思路吧,重新安装 Visual Studio 2010,把他安装在没有空格没有特殊字符的路径下,可惜了,还是不行,./configure检查 C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A时又出现了此问题。难道要重新安装 Window SDK?不,显然不合理,回到问题:**MSYS2 无法使用 CMD 转换路径为 ****DOS-style**路径
  • 虽然将 Visual Studio 2010 安装到没有空格没有特殊字符路径下,没能彻底解决问题,但是脚本跑到了下图红框位置,让我发现了一个思路–使用批处理文件间接执行转换为**DOS-style**路径的命令。

image.png

  • 解决此问题过程还发现了./configure存在的其他问题,详见http://cr.openjdk.java.net/~erikj/8022177/webrev.root.01/
  • **所有改动已导出为 **[**.patch**](https://gitee.com/zhuqin2016/shared-code-snippets/blob/master/openjdk8/build/fix_for_msys2_build.patch),涉及文件如下所示,其中./common/autoconf/generated-configure.sh 依赖 autoconf工具,MSYS2 通过 pacman -S autoconf-wrapper下载,执行 ./common/autoconf/autogen.sh生成 generated-configure.sh
Target CPU mismatch

3fa7746d5fa7de18816fa86ce092dda.png

  • 问题在于安装的 Visual Studio 2010 是中文版的,./configure从 CL 的版本信息解析系统信息,如果是中文版,就不能正常解析,重新安装英文版解决。
make过程提示超过十年

12a30f247a77eb0df9ecee130ca3d1c.png

  • 直接将抛错处年限调大即可

参考

https://technfun.wordpress.com/2015/08/03/building-openjdk-8-for-windows-using-msys/

  • 41
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
OpenJDK是一个开源的Java开发工具包,而OpenJDK 8是其第八个版本。而"-alpine"是一个指定操作系统的标记,代表该OpenJDK版本是为Alpine Linux操作系统而设计的。 Alpine Linux是一个轻量级的Linux发行版,其主要特点是体积小、速度快以及安全性高。由于Alpine Linux的设计初衷是用于在容器化环境下运行,因此它的体积比较小。 在Docker容器中,使用OpenJDK:8-alpine意味着我们正在运行一个基于Alpine Linux的OpenJDK 8镜像。这个镜像是已经包含了OpenJDK 8所需要的所有依赖库,并且已经针对Alpine Linux进行了优化。 然而,对于中文字库来说,OpenJDK:8-alpine并不默认包含中文支持。由于Alpine Linux的设计初衷是轻量级和安全性,因此默认情况下并没有包含许多语言的本地化支持。如果需要在OpenJDK:8-alpine中运行中文程序,我们需要手动安装中文字库。 为了安装中文字库,我们可以使用以下命令在容器中进行安装: ``` RUN apk add --no-cache ttf-dejavu ``` 运行上述命令之后,我们就可以在OpenJDK:8-alpine容器中使用中文字库了。通过安装ttf-dejavu这个包,我们可以获得DejaVu字体系列,这个字体系列包含了中文字库。 总结来说,OpenJDK:8-alpine是一个适用于Alpine Linux的OpenJDK 8镜像。对于中文字库的支持,需要手动安装相关字体库,例如通过安装ttf-dejavu包来提供中文字库支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值