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

news2024/11/26 17:26:34

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 -version
java -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 编译

参考文章

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/83735.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

反抗与反噬:亚马逊被迫结束封号神秘主义,不再粗暴关店

“每一天醒来,都要看一眼自己的店铺是否还在。”、“账号被封之后,自己也曾第一时间向平台申诉,经历过一次、两次甚至是多次申诉无果后,才意识到账号是真的回不来了。”、“过去传言大卖有保护伞,这一回才发现做亚马逊…

B站有哪些值得Java初学者看的视频,Java学习路线

我的读者中有很大一部分学生读者,以前也分享过一些Java学习路线,但是我收到的反馈并不好,因为学习路线包含的内容太多了,对于初学者来说难度太大,时间也不够用,根本学不完。今天我将结合B站优秀视频整理一期…

英特尔着眼系统工艺协同优化理念,推进摩尔定律新浪潮

Ann Kelleher介绍了晶体管诞生75年之后的新进展 在IEDM 2022(2022 IEEE国际电子器件会议)全体会议上发表演讲之前,英特尔副总裁兼技术开发总经理Ann Kelleher接受了《IEEE Spectrum》的采访,她表示,摩尔定律的下一波浪…

Tcp/Udp(网络套接字,服务器) -- Linux/Windows

目录 网络传输本质 认识端口号 认识协议 认识TCP协议 认识UDP协议 网络字节序 socket编程接口 socket 常见API sockaddr结构 sockaddr 结构 sockaddr_in 结构 in_addr结构 编写代码前的小tip(重点) UDP套接字(网络通信&#xf…

算法竞赛入门【码蹄集进阶塔335题】(MT2101-2125)

算法竞赛入门【码蹄集进阶塔335题】(MT2201-2225) 文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2201-2225)前言为什么突然想学算法了?为什么选择码蹄集作为刷题软件?目录1. MT2101 竹鼠发瓜子2. MT2102 竹鼠发瓜子(二…

Raft协议

Raft协议先行了解 总体过程速览 假设我们只使用一个节点,可以很容易的达成协议或者共识。 但是现在我们思考,假如有多个节点呢? 多个节点之间达成协议或者共识就叫做分布式共识。 而Raft就是一个实现分布式共识的协议。 一个节点可以有3…

数字化转型的十大好处

前言: 在过去的几年中,“适者生存”对企业来说是至关重要的。不能适应环境变化的企业,也将会加速被淘汰的进程。只有从数字化转型中受益的企业才能更好的参与管理和快速调整,这样一来,员工便能够在更高效、更安全的状…

黑盒测试用例设计 - 判定表法

什么是判定表? 判定表法也叫判定驱动法,是分析和表达多逻辑条件下执行不同操作的情况的工作。 应用场合:只要适用于多条件的内容组合与结果分析 它由以下几个内容组成: 条件桩(condition stub)&#xff1…

LwIP带操作系统的移植

目录 LwIP移植前期准备 LwIP移植流程 修改lwipopts.h 修改lwip_comm.c文件 修改ethernetif.c/h文件 修改ethernetif_input函数 修改ethernet.c文件 添加应用程序 LwIP是支持操作系统的,在操作系统的支持下我们可以使用LwIP提供的另外两种API编程接口编程。没…

使用动态代理+Netty+Zookeeper+Protobuff手撸一个RPC框架

RPC是什么 RPC(Remote Procedure Call)远程过程调用,一种计算机之间的远程调用技术,客户端能够在不知道服务器底层的通信架构的情况下调用服务器端的方法,就像调用自身的方法一样。 举个例子: 老婆自己去…

Uni-app 实现md5加密

写下这篇文章,记录自己走过的坑 第一次尝试:参照博客uniapp使用md5_清雨小竹的博客-CSDN博客_uniapp md5 引入md5.js后,在main.js中import后,无法使用md5.hex_md5("需要加密的字符串"),vue页面无法打开&…

【捕风捉影】Vue项目报错,点击浏览器报错信息定位不到报错代码,该如何优雅地调试代码?

【捕风捉影】Vue项目如何优雅地调试代码一、背景二、调试时开启productionSourceMap三、devtool几种模式一、背景 通过vue-cli服务运行项目,项目运行一切正常。但打包后,通过nginx部署运行,大屏展示模块报echarts typeError 错误。但是点击浏…

如何使用Docker创建自定义网络

目录 网络模式 1.bridge模式(默认模式--桥接模式) 初识网络模式 查看桥接模式的特点 2.host模式(仅主机模式) 使用守护进程的方式创建并启动且进入容器 查看仅主机模式下的网络配置 端口映射 :​ 3.如何创建自定义网络 网络模式 Docker…

启发式算法 之 模拟退火原理及实践

一、初窥其貌 1.1 启发式算法和元启发式算法 启发式算法是求解优化问题的一类方法,因为经典优化方法存在局限性,有时无法得到最优解,只能得到一个可以接受的近似最优解,启发式算法就适合求解这类问题。启发式算法就是专家的推测…

Redis框架(七):大众点评项目 缓存穿透、缓存击穿、缓存雪崩

大众点评项目 缓存穿透、缓存击穿、缓存雪崩需求:缓存穿透、缓存击穿、缓存雪崩处理策略缓存穿透处理缓存雪崩缓存击穿总结SpringCloud章节复习已经过去,新的章节Redis开始了,这个章节中将会回顾Redis实战项目 大众点评 主要依照以下几个原则…

吉时利Keithley静电计程控上位机软件-摩擦纳米发电机测试软件NS-EM

1、产品简介 NS-EM 静电计程控系统可实现对吉时利静电计的程控,通过此系统软件您可以单独程控静电计进行数据的采集的同时还可以利用告诉信号采集卡对测试获取的电压、电流等信号进行高频率采样并实时显示采集信号的波形图。 2、产品特点 ◆可远程进行仪器控制&am…

QF state machine 介绍

转型Qt小半年了,看到项目组用的Qt state machine signal和匿名函数满天飞,就想之前用的C#里的QF state machine 能不能做转到Qt平台。这样可以省去使用Qt状态机的信号,在这过程中学习借鉴了QF state machine 的鼻祖 QP框架,不知道…

编译原理笔记

第一课: 《编译原理求语法树的短语和直接短语等等》 二义性是什么? 如果最左推导和最右推导的结果不一致,那么说明文法有二义性 短语是什么? 找短语就是找能长叶子的结点,有五个如图圆圈标号1 2 3 4 5 直接短语&#x…

c语言:联合体—union

联合体一.基本认识1.一个联合体的基本样式2.内部成员的访问3.具体的内存分配二.大小端对联合体的影响三.一个问题一.基本认识 1.一个联合体的基本样式 看得出来其实跟我们定义结构体是一样的(如果还不大了解结构体的可以看看这篇博客什么是结构体)&…

[附源码]计算机毕业设计港口集团仓库管理系统Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: Springboot mybatis MavenVue等等组成,B/S模式…