胸怀万里世界, 放眼无限未来。这篇文章主要讲述Java技术指南「OpenJDK专题」想不想编译属于你自己的JDK呢?(Windows环境)相关的知识,希望能为你提供帮助。
Win10下编译OpenJDK8
编译环境
- Windows10专业版64位;
- 安装 Visual Studio 2010 Professional
- 准备OpenJDK8
- 编译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
- 安装Cygwin
- 编译JDK需要使用到Unix和Linux上的一些工具软件,Cygwin可以在Windows上运行这些系统上的软件。
- 推荐下载地址:http://www.cygwin.com/
文章图片
- 准备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目录下
开始编译
- 生成编译配置脚本
./configure --with-freetype=你本机路径/freetype-2.7/ --with-target-bits=64 --enable-debug
- 编译JDK
make all
- 验证编译结果
javac -version
java -version
文章图片
失败问题处理
- 提示cygwin太老,但使用的cygwin确实是1.7版本以后的版本,提示如下如图:
文章图片
- 这是由于OpenJDK8自带的生成配置的脚本的问题。
文章图片
- 文本编辑器打开OpenJDK目录下的 openjdk8\\common\\autoconf\\generated-configure.sh 这个文件搜索上面的提示文字“Your cygwin is too old在这里插入图片描述,将if条件语句注释掉
文章图片
- 编译images库时失败
执行编译到images相关库的时候会出错
文章图片
- 用 Notepad++ 软件打开OpenJDK目录里的 CreateJars.gmk 这个文件
- 依次点击菜单栏中的:视图 -> 显示符号 -> 显示所有符号
- 然后就可以看到所有的符号,包括换行符和回车符
文章图片
文章图片
在两个 ‘class$$’ 中间加入回车符号(按下Ctrl + M),如下图:
文章图片
修改完成后保存,执行 make clean 命令清理后再次执行 make all 编译
参考文章
文本在编写和实施过程中参考了如下的博文或文章:
【Java技术指南「OpenJDK专题」想不想编译属于你自己的JDK呢((Windows环境))】https://blog.csdn.net/wqlinloveruby/article/details/80409031
https://www.jianshu.com/p/e85f93cc74cb
OpenJDK源码目录下的README-builds.html官方文档
https://blog.csdn.net/qq0012520/article/details/86014579
推荐阅读
- 超简单五步实现Linux虚拟机CentOS 7系统Root密码忘记重置
- 从源码分析创建线程池的4种方式
- wait_event()和wait_event_interruptible()的介绍
- Greenplum EXPLAIN 详解
- linux部署项目,验证码不显示
- 利用jenkins自由风格用shell脚本进行所有项目发版(java项目)
- 已经安装好的gitlab汉化
- Redis 数据类型介绍
- linux dmidecode 获取CPU ID等系统硬件信息