准备
- 源码下载:https://github.com/openjdk/jdk/tree/jdk8-b120
- MSYS2安装:https://www.msys2.org/
- jdk7安装:https://www.oracle.com/java/technologies/javase/javase7-archive-downloads.html
- Visual Studio Professional 2010:https://my.visualstudio.com/Download
- 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
执行成功:
开始构建
make all
- 更多参数详见源码中的
README-builds.html
- 顺利的话,
make
成功:
产物校验
- 顺利的话,在
build\windows-x86_64-normal-server-fastdebug\images\j2sdk-image
可以看到我们构建好的 jdk- 输出路径中的
${windows-x86_64-normal-server-fastdebug}
视构建系统和./configure
参数而定
- 输出路径中的
java -version
看到构建好的 jdk 版本信息
问题
- 可惜并不顺利,遇到了如下种种问题,好在都被我逐个攻破
zip
、cmp
等工具缺失
- 可能不止这两款工具,没有一一记录下来,
./configure
会指出确实的工具 - MSYS2 的包管理系统是
pacman
,缺失工具可从 MSYS2 Packages 查找相关工具下载指令
不支持的操作系统(unsupported operating system)
- MSYS2 有多套环境,默认环境是
**UCRT64**
。 - 根据报错关键字,找到脚本源码,看到支持系统如下所示:
- 配置环境变量
MSYSTEM=MINGW64
,指定 CMD 下使用MINGW64
环境
找不到 Visual Studio
- 遇到此问题是我自以为是了,以为有 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。
显示 cmd 窗口关键字,并提示 Cannot continue
- 提示找不到
vcvars64.bat
,但神奇的是,顺着提示的目录找过去,是可以找到此文件的 - 根据报错关键字,找到问题脚本源码:
- 该段脚本会将包含
-_/:a-zA-Z0-9
之外字符的路径替换位DOS-style
风格路径 - **该脚本出问题时因为 **
**MSYS2**
的隐式路径风格替换,详见 MSYS2 - Filesystem Paths。- 会自动将类 Unix 路径替换位 Window 路径,如:
/c
–>c:
- 会自动将类 Unix 路径替换位 Window 路径,如:
- 后面查到可使用
//c
代替/c
解决此问题
- 但执行脚本中替换位
DOS-style
路径的脚本还是有问题,如下所示,显然不是DOS-style
路径,使用//c
无法根除问题。该如何处理呢?
- 想破脑袋也想不通啊!那我们换种思路吧,重新安装 Visual Studio 2010,把他安装在没有空格没有特殊字符的路径下,可惜了,还是不行,
./configure
检查C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A
时又出现了此问题。难道要重新安装Window SDK
?不,显然不合理,回到问题:**MSYS2 无法使用 CMD 转换路径为 ****DOS-style**
路径。 - 虽然将 Visual Studio 2010 安装到没有空格没有特殊字符路径下,没能彻底解决问题,但是脚本跑到了下图红框位置,让我发现了一个思路–使用批处理文件间接执行转换为
**DOS-style**
路径的命令。
- 解决此问题过程还发现了
./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
- 问题在于安装的 Visual Studio 2010 是中文版的,
./configure
从 CL 的版本信息解析系统信息,如果是中文版,就不能正常解析,重新安装英文版解决。
make过程提示超过十年
- 直接将抛错处年限调大即可
参考
https://technfun.wordpress.com/2015/08/03/building-openjdk-8-for-windows-using-msys/