windows环境下编译OpenJDK12

环境:Windows11

目录:

1、下载OpenJDK12源码

下载地址:

https://hg.openjdk.org/jdk/jdk12

Untitled.png

点击zip下载到本地。

解压到本地。

Tip:注意本地路径中最好不要包含中文或空格。

2、阅读一遍doc/building.html

如果只是想构建JDK,又没耐心看完那么多内容,只要看 TL;DR (Instructions for the Impatient) 部分的内容就可以了 😃

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

1、获取源码(http://hg.openjdk.java.net/jdk/jdk)

2、运行配置(bash configure)

3、运行make(make images)

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

5、运行基本测试(make run-test-tier1)

3、安装CYGWIN

CYGWIN是一个用于在windows上模拟UNIX或LINUX环境的软件,在其上可使用GNU工具集在Windows上进行嵌入式系统开发。

之所以要下载这个软件,是因为后面编译OpenJDK的时候,需要用GNU Make来执行Makefile文件。

下载地址:
Cygwin

安装教程:

Windows环境运行Linux命令——Cygwin安装_难拳的博客-CSDN博客

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

Untitled 1.png

官网下载地址:https://visualstudio.microsoft.com/zh-hans/vs/

5、配置依赖

打开控制台,输入 bash ,进入Bourne Again Shell环境:

Untitled 2.png

进入OpenJDK12源码解压后的路径,输入 bash configure:

Untitled 3.png

编译FastDebug版、仅含Server模式的HotSpot虚拟机:

bash configure --enable-debug --with-jvm-variants=server

Tip:如果之前执行过配置命令,需要先清除一下目录:make dist-clean

配置踩坑合集

报错1:

Untitled 4.png

configure: Your path contains Windows tools (C:\Windows\system32) before your unix (cygwin or msys) tools. configure: This will not work. Please correct and make sure /usr/bin (or similar) is first in path. configure: error: Cannot continue configure exiting with result code 1

解决方案1:

bash --login -i 进入shell环境

报错2:

configure: Could not find a valid Boot JDK.
configure: error: Cannot continue
configure: This might be fixed by explicitly setting --with-boot-jdk
configure exiting with result code 1

解决方案2:

下载JDK11:https://www.oracle.com/java/technologies/downloads/#java11

安装完成后,执行:

bash configure --enable-debug --with-jvm-variants=server --with-boot-jdk=/cygdrive/d/jdk11

指定boot jdk路径:-with-boot-jdk=/cygdrive/d/jdk11

报错3:

configure: Cannot locate a valid Visual Studio installation, checking current environment
checking for Visual Studio variables... not found
configure: Cannot locate a valid Visual Studio or Windows SDK installation on disk,
configure: nor is this script run from a Visual Studio command prompt.
configure: Try setting --with-tools-dir to the VC/bin directory within the VS installation
configure: or run "bash.exe -l" from a VS command prompt and then run configure from there.
configure: error: Cannot continue
configure exiting with result code 1

解决方案3:

bash configure --enable-debug --with-jvm-variants=server --with-boot-jdk=/cygdrive/d/jdk11 --with-tools-dir=/cygdrive/d/software/vs2019/VC/Auxiliary/Build

指定:-with-tools-dir=/cygdrive/d/software/vs2019/VC/Auxiliary/Build

同时注释掉OpenJDK12源码中make/autoconf/toolchain_windows.m4文件中的这句:

#VS_ENV_CMD=""

以及make/autoconf/toolchain.m4中的:

#AC_MSG_ERROR([A $TOOLCHAIN_TYPE compiler is required. Try setting --with-tools-dir.])

报错4:

configure: Rewriting OBJDUMP to "/usr/bin/objdump"
configure: error: Target CPU mismatch. We are building for x86_64 but CL is for "□□"; expected "x64".
configure exiting with result code 1

解决方案4:

在make/autoconf/toolchain.m4中找到Target CPU mismatch对应的AC_MSG_ERROR,改成AC_MSG_NOTICE。

报错5:

configure: Rewriting CYGWIN_VC_INSTALL_DIR to "/cygdrive/d/software/vs2019/VC"
ls: cannot access '/cygdrive/d/software/vs2019/VC/Redist/MSVC/*/x64/Microsoft.VC141.CRT/vcruntime140.dll': No such file or directory
configure: Found vcruntime140.dll at /cygdrive/d/jdk11/bin/vcruntime140.dll using well-known location in Boot JDK
checking found vcruntime140.dll architecture... ok
checking for vcruntime140.dll... /cygdrive/d/jdk11/bin/vcruntime140.dll
configure: Rewriting CYGWIN_VC_INSTALL_DIR to "/cygdrive/d/software/vs2019/VC"
ls: cannot access '/cygdrive/d/software/vs2019/VC/Redist/MSVC/*/x64/Microsoft.VC141.CRT/msvcp140.dll': No such file or directory
configure: Found msvcp140.dll at /cygdrive/d/jdk11/bin/msvcp140.dll using well-known location in Boot JDK
checking found msvcp140.dll architecture... ok
checking for msvcp140.dll... /cygdrive/d/jdk11/bin/msvcp140.dll
checking for UCRT DLL dir... configure: Rewriting CYGWIN_WINDOWSSDKDIR to "/cygdrive/c/progra~2/wi3cf2~1/10"
no
configure: error: Could not find any dlls in /cygdrive/c/progra~2/wi3cf2~1/10/Redist/ucrt/DLLs/x64
configure exiting with result code 1

解决方案5:

toolchain_window.m4文件中的

UCRT_DLL_DIR="$CYGWIN_WINDOWSSDKDIR/Redist/ucrt/DLLs/$dll_subdir"

中间加上对应的版本号:

UCRT_DLL_DIR="$CYGWIN_WINDOWSSDKDIR/Redist/10.0.19041.0(版本号,在c/progra~2/wi3cf2~1/10/Redist下)/ucrt/DLLs/$dll_subdir"

再次执行:

bash configure --enable-debug --with-jvm-variants=server --with-boot-jdk=/cygdrive/d/jdk11 --with-tools-dir=/cygdrive/d/software/vs2019/VC/Auxiliary/Build

终于配置成功:

Untitled 5.png

6、编译

先执行make clean清除旧配置

Untitled 6.png

执行make images编译:

编译踩坑合集

报错1:

Untitled 7.png

解决1:

摸进e/jdk12-06222165c35f/build/windows-x86_64-server-fastdebug/make-support/failure-logs的错误日志里看看:

Untitled 8.png

这个test_json.cpp文件里有语法错误,是文件编码的问题,把文件编码改为utf-8-bom格式。

再次执行make clean和make images:

报错2:

Untitled 9.png

解决2:

看到test_json.cpp的357和363等行里都有一个小雪人字符:

Untitled 10.png

把所有雪人字符都替换成普通字母,再次执行make clean和make images:

报错3:

Untitled 11.png

解决3:

找到methodMatcher.cpp,在240行后加上这三句:

Untitled 12.png

    #pragma warning(disable: 4819)
    #pragma warning(disable: 4778)
    #pragma warning(disable: 4474)

报错4:

Untitled 13.png

error C2039: "Do_Not_Use_calloc_Use_safe_Calloc_Instead": 不是 "`global namespace'" 的成员
error C2873: “Do_Not_Use_calloc_Use_safe_Calloc_Instead”: 符号不能用在 using 声明中
error C2039: "Do_Not_Use_malloc_Use_safe_Malloc_Instead": 不是 "`global namespace'" 的成员
error C2873: “Do_Not_Use_malloc_Use_safe_Malloc_Instead”: 符号不能用在 using 声明中
error C2039: "Do_Not_Use_realloc_Use_safe_Realloc_Instead": 不是 "`global namespace'" 的成员
error C2873: “Do_Not_Use_realloc_Use_safe_Realloc_Instead”: 符号不能用在 using 声明中

解决4:

找到src\java.desktop\windows\native\libawt\windows\alloc.h,将文件格式改为utf-8-bom。

并将87行开始的下面这三句注释掉:

#define malloc Do_Not_Use_malloc_Use_safe_Malloc_Instead
#define calloc Do_Not_Use_calloc_Use_safe_Calloc_Instead
#define realloc Do_Not_Use_realloc_Use_safe_Realloc_Instead

报错5:

Building target 'images' in configuration 'windows-x86_64-server-fastdebug'
Warning: No SCM configuration present and no .src-rev
make[3]: *** No rule to make target '/cygdrive/e/jdk12/build/windows-x86_64-server-fastdebug/buildtools/langtools_tools_classes/_the.BUILD_TOOLS_LANGTOOLS.vardeps', needed by '/cygdrive/e/jdk12/build/windows-x86_64-server-fastdebug/buildtools/langtools_tools_classes/_the.BUILD_TOOLS_LANGTOOLS_batch'.  Stop.
make[3]: *** Waiting for unfinished jobs....
make[3]: *** No rule to make target '/cygdrive/e/jdk12/build/windows-x86_64-server-fastdebug/make-support/vardeps/make/ReleaseFile.gmk/create-info-file.vardeps', needed by '/cygdrive/e/jdk12/build/windows-x86_64-server-fastdebug/jdk/release'.  Stop.
make[2]: *** [make/Main.gmk:369: release-file] Error 2
make[2]: *** Waiting for unfinished jobs....
make[2]: *** [make/Main.gmk:73: buildtools-langtools] Error 2
make[3]: *** No rule to make target '/cygdrive/e/jdk12/build/windows-x86_64-server-fastdebug/make-support/vardeps/make/ModuleWrapper.gmk/java.base/ORDERED_CFG_VARIANTS.vardeps', needed by '/cygdrive/e/jdk12/build/windows-x86_64-server-fastdebug/support/modules_libs/java.base/jvm.cfg'.  Stop.
make[3]: *** Waiting for unfinished jobs....
make[2]: *** [make/Main.gmk:162: java.base-copy] Error 2

解决5:

参见 windows 平台编译openjdk12 - 乐途 - 博客园

make -v,检查一下Cygwin里make的版本,我的版本不知道什么时候改成了4.4,在Cygwin里卸载掉就可以了。

解决完所有报错后,执行 make images

编译成功

Untitled 15.png

7、安装IDE:CLion

1)CLion安装教程:

https://www.kdocs.cn/l/cvdh8F64PEfQ?openfrom=docs

2)打开OpenJDK项目:选择Open Project

Untitled 16.png

3)CLion配置Cygwin(Cygwin安装教程见上一章上机实验):

Setting>Toolchains

Untitled 17.png

4)CLion配置编译参数:

Setting>Custom Build Targets

Untitled 18.png

点击Build和Clean右侧的…配置对应的External Tools:

Untitled 19.png

  • CONF=windows-x86_64-server-fastdebug(在jdk编译后的build目录下)

Untitled 20.png

Untitled 21.png

Untitled 22.png

AddConfiguration>Custom Build Application

Untitled 23.png

运行:

Untitled 24.png

正确输出版本号,测试成功:

Untitled 25.png

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数组对象去重的几种方法

场景: let arrObj [{ name: "小红", id: 1 },{ name: "小橙", id: 1 },{ name: "小黄", id: 4 },{ name: "小绿", id: 3 },{ name: "小青", id: 1 },{ name: "小蓝", id: 4 } ]; 方法一:…

2023年第2季社区Task挑战赛升级新玩法,等你来战!

第1季都有哪些有趣的作品? 在大家的共建下,FISCO BCOS开源生态不断丰富完善,涌现了众多实用技术教程和代码:基于数字身份凭证的业务逻辑设计,贡献了发放数字身份凭证的参考实现;提供企业碳排放、慈善公益等…

【基础类】—原型链系统性知识

一、创建对象有几种方法 字面量创建对象 1-1. 什么是字面量 字面量就是所见即所,指的是常量;用来为变量赋值时的常数量 代码例子:123;‘ABC’, {name: ‘张三’}, undefined , true 生活例子:门店的招牌&a…

[C++项目] Boost文档 站内搜索引擎(4): 搜索的相关接口的实现、线程安全的单例index接口、cppjieba分词库的使用、综合调试...

有关Boost文档搜索引擎的项目的前三篇文章, 已经分别介绍分析了: 项目背景: 🫦[C项目] Boost文档 站内搜索引擎(1): 项目背景介绍、相关技术栈、相关概念介绍…文档解析、处理模块parser的实现: 🫦[C项目] Boost文档 站内搜索引擎(2): 文档文本解析模块…

CDN(内容分发网络)

CDN的全称是 Content Delivery Network, 即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞&a…

CentOS7 安装 MongoDB5

MongoDB是一种NoSQL数据库,它存储数据的方式与传统的关系型数据库不同。MongoDB使用文档数据库模型,将数据存储在自包含的、可扩展的BSON文档中。MongoDB具有高可用性、自动分片、动态查询能力、灵活性等优点,适合于许多不同的应用场景。 下…

ACM Journals的Word模板使用心得

按照说明一步一步按照顺序调整格式,体力活,考验耐心细心。 两个模板,第一个是 Submission Template投稿用的,第二个是Primary Article Template接收后用的。 及时保存备份,以便恢复到最初满意的状态。 格式确定后&a…

EMC框架简单归纳

电磁干扰的产生原因&#xff1a;电压/电流的变化中不必要的部分。 电磁干扰的耦合途径有两种&#xff1a;导线传导和空间辐射。 导线传导干扰原因是电流总是走“最小阻抗”路径。以屏蔽线为例&#xff0c;低频&#xff08;f<1kHz&#xff09;时&#xff0c;导线的电阻起到主…

函数的递归与迭代

递归经典问题&#xff1a;&#xff08;自行尝试&#xff09; 1、汉诺塔问题 2、青蛙跳台阶问题 练习1、 练习2、

API HOOK技术在MFC程序破解过程中的应用

更新&#xff0c;修改了一下typora的上传脚本&#xff0c;把图片全部上传到看雪上了 本文已于2023-08-02首发于个人博客 图片加载不出来&#xff0c;放了一个PDF版本在附件里 文中有几张图片是动图&#xff0c;如果不会动&#xff0c;可以去我的个人博客看 最近破解了一个M…

W5500-EVB-PICO 做TCP Server进行回环测试(六)

前言 上一章我们用W5500-EVB-PICO开发板做TCP 客户端连接服务器进行数据回环测试&#xff0c;那么本章将用开发板做TCP服务器来进行数据回环测试。 TCP是什么&#xff1f;什么是TCP Server&#xff1f;能干什么&#xff1f; TCP (Transmission Control Protocol) 是一种面向连…

MYSQL进阶-查询优化- 实战 STATUS

回城传送–》《100天精通MYSQL从入门到就业》 文末有送书活动&#xff0c;可以参加&#xff01; 文章目录 一、练习题目二、SQL思路SQL进阶-查询优化- SHOW STATUS初始化数据解法SHOW STATUS是什么实战经验&#xff1a;常用的mysql状态查询1、QPS(每秒处理的请求数量)计算思路…

flutter相关URL schemes

先看效果 使用 url_launcher库 做唤起其他app操作 url_launcher | Flutter Package 配置 安卓 flutter 项目目录下的 android\app\src\main\AndroidManifest.xml 如果不配置的话 有些手机就打不开app <queries><!-- If your app checks for SMS support --><…

Web前端之NodeJS、Vue

文章目录 一、Babel转码器1.1 Babel安装流程1.2 Babel命令行转码 二、Promise对象三、测试方式四、Vue&#xff08;渐进式JS框架&#xff09;4.1 准备4.2 创建一个项目4.3 运行一个项目 五、模板语法5.1 文本5.2 原始html5.3 属性Attribute5.4 使用JavaScript表达式 六、条件渲…

禁止别人调试自己的前端页面代码

为啥要禁止&#xff1f; 由于前端页面会调用很多接口&#xff0c;有些接口会被别人爬虫分析&#xff0c;破解后获取数据 为了 杜绝 这种情况&#xff0c;最简单的方法就是禁止人家调试自己的前端代码 无限 debugger 前端页面防止调试的方法主要是通过不断 debugger 来疯狂输…

chatGPT应用于房地产行业

作为 2023 年的房地产专业人士&#xff0c;您无疑认识到技术对行业的重大影响。近年来&#xff0c;一项技术进步席卷了世界——人工智能。人工智能彻底改变了房地产业务的各个方面&#xff0c;从简化管理任务到增强客户互动。 在本文中&#xff0c;我们将探讨几种巧妙的人工智…

CEC2013(MATLAB):能量谷优化算法EVO求解CEC2013的28个函数

一、能量谷优化算法EVO 能量谷优化算法&#xff08;Energy valley optimizer&#xff0c;EVO&#xff09;是MahdiAzizi等人于2023年提出的一种新颖的元启发式算法&#xff0c;其灵感来自关于稳定性和不同粒子衰变模式的物理原理。能量谷优化算法&#xff08;Energy valley opt…

spss什么是描述性分析,以及如何去处理。

描述性分析是数据分析的第一步&#xff0c;是了解和认识数据基本特征和结构的方法&#xff0c;只有在完成了描述性统计分析&#xff0c;充分的了解和认识数据特征后&#xff0c;才能更好地开展后续更复杂的数据分析。因此&#xff0c;描述性分析是开展数据分析过程中最基础且必…

Idea添加mybatis的mapper文件模版

针对Java开发人员&#xff0c;各种框架的配置模版的确是需要随时保留一份&#xff0c;在使用的时候&#xff0c;方便复制粘贴&#xff0c;但是也依然不方便&#xff0c;我们可以给开发工具&#xff08;IDE&#xff09;中添加配置模版&#xff0c;这里我介绍下使用idea开发工具&…

高忆管理:今年来尚未有公司递表,香港SPAC市场为何“熄火”?

香港SPAC上市准则敞开之后&#xff0c;从第一家公司上市到现在已经有1年多的时刻。&#xff08;【深度】王石、李宁、卫哲争相发起建立SPAC&#xff0c;香港版“上市盲盒”会火吗&#xff1f; 界面新闻了解到&#xff0c;今年以来&#xff0c;香港SPAC并没有新动态&#xff0c;…