写点什么

☕【Java 技术指南】「OpenJDK 专题」想不想编译属于你自己的 JDK 呢?(Windows10 环境)

发布于: 13 小时前
☕【Java技术指南】「OpenJDK专题」想不想编译属于你自己的JDK呢?(Windows10环境)

Win10 下编译 OpenJDK8

编译环境

  • Windows10 专业版 64 位;

编译前准备

Tip: 以下软件的安装和解压目录尽量不要包含中文或空格,不然可能会出现问题


  1. 安装 Visual Studio 2010 Professional


在 windows 下编译 JDK 需要使用 Visual Studio 2010 Professional,推荐下载地址:https://msdn.itellyou.cn/


最好下载英文版的 IDE,不然可能会出现问题,下载完成后只用勾选安装 C++部分就行


  1. 准备 OpenJDK8


首先下载 OpenJDK8,推荐下载地址:https://download.java.net/openjdk/jdk8 , 下载完成后解压


  1. 编译 JDK 环境安装(如果已经安装,跳过此部)


  • 编译 OpenJDK 需要本机先安装上 JDK 作为编译 JDK,而且该编译 JDK 的版本必须要使用前一个版本的 JDK,编译 OpenJDK8 需要安装 JDK7 Update 7 以后的版本。

  • 首先下载 Oracle JDK7 并解压,推荐下载地址:https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html


下载完成后配置 JDK 环境变量(JAVA_HOME、Path、classpath)


  1. 安装 Cygwin


  • 编译 JDK 需要使用到 Unix 和 Linux 上的一些工具软件,Cygwin 可以在 Windows 上运行这些系统上的软件。

  • 推荐下载地址:http://www.cygwin.com/



下载最新版的 Cygwin 后安装,由于默认的安装只会安装一些必要的软件,所以安装过程中需要选择安装一些额外的包,需要的包如下图:


如果已经安装完了 Cygwin 软件后,想要继续安装其他的软件包,可以再次运行 Cygwin 的安装程序,在过程中确保其选中了本地的 Cygwin 安装目录,一直点击下一步后会出现选择安装包的界面。


  1. 准备 FreeType-2.7


  • 编译 JDK 需要用到 FreeType,它是一个字体渲染库,官方文档中没有提及,但它是必须的。

  • 最好使用 2.7 版本的,我先前使用较新版本的会出现问题。

  • 推荐下载地址:https://www.freetype.org/ ,下载完成后解压: https://www.freetype.org/download.html

  • 运行 Visual Studio 2010,依次点击 File -> Open -> Project/Solution


  • 选择打开 freetype-2.7\builds\windows\vc2010\freetype.sln 文件


  • 选中项目后右击选择 Properties,弹出窗口后操作如下图:






点击应用后再点击确定关闭窗口,右击项目,点击 Build 按钮后成功编译出 lib 文件。


再次右击项目,点击 Properties 按钮,弹出窗口。



点击应用后再点击确定关闭窗口;右击项目,点击 Build 按钮后成功编译出 dll 文件。


在 freetype-2.7/ 目录下新建 lib 目录将 freetype-2.7\objs\vc2010\x64\ 目录下的 freetype.lib 和 freetype.dll 两个文件拷贝到 lib 目录下

开始编译

  1. 生成编译配置脚本


运行 Cygwin,cd 进入 OpenJDK8 的根目录


Tip :Cygwin 中的目录可以直接用 Windows 的目录标记方式,比如:‘D:\DirName\file.txt’,单必须使用单引号包围,也可以使用类似 linux 的形式:如: /cygdrive/d/DirName/file.txt,推荐使用后一种方式兼容性较好。

输入如下命令:
./configure --with-freetype=你本机路径/freetype-2.7/ --with-target-bits=64 --enable-debug
复制代码


注意以上的 freetype 路径替换成你本机上的路径,运行成功后显示如下:


  1. 编译 JDK


Cygwin 切换到 Open JDK 根目录下,执行如下命令


make all
复制代码


命令执行后会开始编译,编译过程可能比较久,具体看机器性能,编译成功后显示如下:


  1. 验证编译结果


在这里仅简单验证一下,官方说需要用 jtreg 来进行回归测试,但该测试比较麻烦和耗时所以就先忽略运行 cmd.exe ,进入目录 openjdk8\build\windows-x86_64-normal-server-fastdebug\jdk\bin,依次输入命令:


javac -versionjava -version
复制代码


失败问题处理

  1. 提示 cygwin 太老,但使用的 cygwin 确实是 1.7 版本以后的版本,提示如下如图:


  • 这是由于 OpenJDK8 自带的生成配置的脚本的问题。


  • 文本编辑器打开 OpenJDK 目录下的 openjdk8\common\autoconf\generated-configure.sh 这个文件搜索上面的提示文字“Your cygwin is too old 在这里插入图片描述,将 if 条件语句注释掉



  1. 编译 images 库时失败执行编译到 images 相关库的时候会出错


在这里插入图片描述错误信息中显示了一个 CreateJars.gmk 出错,查阅相关资料后发现是文件中需要加上两个回车符号,也就是 '\r’表示为 CR 这个符号。


  • 用 Notepad++ 软件打开 OpenJDK 目录里的 CreateJars.gmk 这个文件

  • 依次点击菜单栏中的:视图 -> 显示符号 -> 显示所有符号

  • 然后就可以看到所有的符号,包括换行符和回车符


找到文件中如下的地方:



在两个 ‘class$$’ 中间加入回车符号(按下 Ctrl + M),如下图:



修改完成后保存,执行 make clean 命令清理后再次执行 make all 编译

参考文章

文本在编写和实施过程中参考了如下的博文或文章:


  1. https://blog.csdn.net/wqlinloveruby/article/details/80409031

  2. https://www.jianshu.com/p/e85f93cc74cb

  3. OpenJDK 源码目录下的 README-builds.html 官方文档 https://blog.csdn.net/qq0012520/article/details/86014579

发布于: 13 小时前阅读数: 2
用户头像

🏆2021年InfoQ写作平台-签约作者 🏆 2020.03.25 加入

👑【酷爱计算机技术、醉心开发编程、喜爱健身运动、热衷悬疑推理的”极客狂人“】 🏅 【Java技术领域,MySQL技术领域,APM全链路追踪技术及微服务、分布式方向的技术体系等】 我们始于迷惘,终于更高水平的迷惘

评论

发布
暂无评论
☕【Java技术指南】「OpenJDK专题」想不想编译属于你自己的JDK呢?(Windows10环境)