当前位置: 首页 > article >正文

Window下编译OpenJDK17

 本文详细介绍Window下如何编译OpenJDK17,包含源码路径,各工具下载地址,严格按照文章中的步骤来操作,你将获得一个由自己亲手编译出的jdk。

 一、下载OpenJDK17源码

下载地址:GitHub - openjdk/jdk at jdk-17+35

说明:

1、kkgithub为github的国内镜像,能够提高下载速度

 2、下载下来的源码存放路径:无中文、无空格

、阅读一遍doc/building.html

简单阅读一遍源码中的编译文档,重点关注各工具的版本要求。

构建步骤主要为以下4步:

1、获取源码

2、运行配置(bash configure)

3、运行make(make images)

4、验证是否构建成功(./build/*/images/jdk/bin/java -version)

、安装CYGWIN

CYGWIN是一个用于在windows上模拟UNIX或LINUX环境的软件,在其上可使用GNU工具集在Windows上进行嵌入式系统开发。之所以要下载这个软件,是因为后面编译OpenJDK的时候,需要用GNU Make来执行Makefile文件。

下载地址:https://www.cygwin.com/setup-x86_64.exe

说明:

1、安装在非不含中文、不含空格的路径下

2、安装必须的组件:<path to Cygwin setup>/setup-x86_64 -q -P autoconf -P make -P unzip -P zip

3、后续的配置和运行,都需要再cygwin环境下执行,双击桌面图标即可进入

、安装Visual Studio 2019(C++编译器)

下载地址:https://aka.ms/vs/16/release/vs_professional.exe

参考地址:

创建基于网络的安装 - Visual Studio (Windows) | Microsoft Learn

说明:

1、OpenJDK17最高只支持VS2017和VS2019,不支持VS2022

2、VS安装路径不能包含中文、空格,在--with-tools-dir需要指定该位置

3、工作负荷需要勾选“使用C++的桌面开发”

4、语言包需要安装“英语”

五、安装jdk(--with-boot-jdk)

jdk编译过程中需要将Java源码编译成class文件,因此本地需要安装现有的jdk,最好版本号和openjdk保持一致。

下载地址:https://aka.ms/download-jdk/microsoft-jdk-17.0.12-windows-x64.msi

说明:jdk安装路径不能包含中文和空格,在--with-boot-jdk中需要指定该位置

六、配置依赖

在cygwin环境执行配置。

  1. 进入jdk源码解压目录。
  2. 执行清理:make dist-clean(每次编译失败需要改配置时,都需要执行清理命令)
  3. 执行配置:bash configure --enable-debug --with-jvm-variants=server --with-boot-jdk=/cygdrive/c/oracle_jdk-17 --with-tools-dir=/cygdrive/c/msv/2019/Professional/VC/Auxiliary/Build --disable-warnings-as-errors(jdk和vs需要替换为自己的目录,/cygdrive/c/oracle_jdk-17为cygwin模式下的路径写法,代表C:\oracle_jdk-17,这些配置项都必不可少,踩过坑
  4. 执行成功提示如下,如果有错误,根据错误信息,查阅building.html中的解决方案,处理完之后执行清理,再重新执行配置

七、编译

1、先执行make clean清除旧配置

2、再执行make images进行编译,预计耗时1小时,成功提示如下:

八、验证

编译输出的jdk路径为:<jdk源码路径>\build\windows-x86_64-server-fastdebug\jdk,jdk目录即为基于源码编出绿色版jdk,进入bin目录,执行Java -version,能正确输出,即代表编译成功


http://www.kler.cn/a/294734.html

相关文章:

  • 数据分析那些事儿——时间片轮转实验
  • Java项目实战II基于Spring Boot的药店管理系统的设计与实现(开发文档+数据库+源码)
  • Caused by: org.apache.flink.api.common.io.ParseException: Row too short:
  • 物联网技术及其在智慧城市中的应用
  • turtlesim修改窗口大小;添加自己的小乌龟;
  • macOS 下的 ARM 裸机嵌入式开发入门- 第二部分:实现第一个裸机应用并且调试
  • 【重学 MySQL】十五、过滤数据
  • 【vue css】background设置背景图片不显示问题
  • 利用人类反馈优化文本摘要质量
  • 力扣刷题--1534. 统计好三元组【简单】
  • 如何用RoBERTa高效提取事件文本结构特征:多层次上下文建模与特征融合
  • 如何快速融入大学课堂
  • 快排Java
  • 多线程篇(ThreadLocal 内存模型 伪共享(伪共享))(持续更新迭代)
  • TCP远程命令执行
  • LLM agentic模式之multi-agent: ChatDev,MetaGPT, AutoGen思路
  • 人工智能 | Mistral 大语言模型
  • 【Zookeeper】小白基础入门
  • 关于vue项目启动报错Error: error:0308010C:digital envelope routines::unsupported
  • 828华为云征文|华为云服务器Flexus X搭建悟空crm管理系统——助力企业云上管理(解决APP Referer校验失败问题)
  • WildCard平台:揭秘ChatGPT畅享版、Claude畅享版及全能畅享套餐
  • JS中【JSON】知识点总结和常用方法分析
  • 活动|华院计算宣晓华受邀出席“AI引领新工业革命”大会,探讨全球科技的最新趋势
  • zhidianyun01/基于基于 ThinkPHP+Mysql 灵活用工平台源码
  • Redis、memcache、MongoDB 对比
  • Java 数据类型