首页 > 系统相关 >Windows 10 下编译 64 位 OpenJDK 8 并单步调试

Windows 10 下编译 64 位 OpenJDK 8 并单步调试

时间:2024-12-16 15:01:00浏览次数:13  
标签:10 java Windows OpenJDK 如下 编译 所示 dll

Windows 10 下编译 64 位 OpenJDK 8

软件版本

  • 操作系统:Windows 10
    image.png

  • Cygwin:3.5.4-1
    image.png

  • Visual Studio:2010 英文版
    image.png

  • freetype: 2.7
    image.png

  • Boot JDK:7
    image

  • 编译的 OpenJDK 版本:8
    image.png

安装 boot JDK

下载链接下载 JDK,然后在 Windows 上安装。安装完成后配置 JAVE_HOME 环境变量,如下图所示:

bootjdk02.png

在已有的 Path 环境变量加入 %JAVA_HOME%\bin ,如下图所示:
在这里插入图片描述
配置完成后在 cmd 中执行 java -version 命令,可以看到对应的版本信息,则证明已配置好,如下图所示:
image

安装 Cygwin

下载链接下载安装程序,然后在 Windows 上安装。
设置安装的路径,这里设置的是 E:\cygwin64,如下图所示:

cygwin01.png

选择要额外安装的命令,包括:binutilscpiom4makeprocps-ngunzipzip
选择安装 binutils 命令,如下图所示:

cygwin02.png

选择安装 cpio 命令,如下图所示:

cygwin03.png

选择安装 m4 命令,如下图所示:

cygwin04.png

选择安装 make 命令,如下图所示:

选择安装 procps-ng 命令,如下图所示:

cygwin06.png

选择安装 unzip 命令,如下图所示:

cygwin07.png

选择安装 zip 命令,如下图所示:

cygwin08.png

安装完成后在已有的 Path 环境变量加入 E:\cygwin64\bin 路径,如下图所示:
image.png

安装 VS 2010

下载链接下载 VS 2010 英文版(这里一定要用英文版),然后在 Windows 上安装。

安装的时候设置安装路径,注意路径中不能有空格,如下图所示:

vs01.png

安装的特性只需要勾选 Visual C++,如下图所示:
在这里插入图片描述

在已有的 Path 环境变量加入 E:\MicrosoftVisualStudio10.0\VC\bin 路径,如下图所示:
image.png

下载并编译 freetype

下载链接下载 freetype 源码并解压。

然后打开 VS 2010,点击 File->Open->Project/Solution,选择 freetype 解压路径下的 builds\windows\vc2010\freetype.sln 文件并打开,如下图所示:

vs03.png

vs04.png

右键后点击 Properties,如下图所示:

vs06.png

配置编译成静态链接库,选择 Configuration 为 Release Multithreaded,Platform 选择 x64, Target Name 修改为 freetype,Target Extension 修改为 .lib,Configuration Type 修改为 Static libraty(.lib),如下图所示:

vs07.png

点击 Build-> Build Solution 编译静态链接库,编译完成后在 freetype 解压路径下的 objs\vc2010\x64 目录下会生成 freetype.lib 文件,如下图所示:

image.png

配置编译静态链接库,主要是 Target Extension 修改为 .dll,Configuration Type 修改为 Dynamic Library(.dll),如下图所示:

vs10.png

点击 Build-> Build Solution 编译动态链接库,编译完成后在 freetype 解压路径下的 objs\vc2010\x64 目录会生成 freetype.dll 文件,如下图所示:

vs11.png

然后在 freetype 解压路径下创建 lib 目录,把 freetype.lib 和 freetype.dll 两个文件拷贝到这个 lib 目录下,如下图所示:
在这里插入图片描述

下载并编译OpenJDK 8

下载链接下载 OpenJDK 8 的源码并解压。如果你使用的软件版本和本文的软件版本一致,则推荐下载替换文件 替换到解压后相对应的目录下,不然编译的时候会遇到报错。不一致的话则手动修改解压后的文件,见后面的编译遇到的问题及解决办法

在 OpenJDK 8 的解压路径下执行 ./configure --with-freetype='/cygdrive/e/freetype-2.7' --with-target-bits=64 --enable-debug -disable-ccache 命令,其中 --with-freetype 替换为实际的 freetype 的路径,执行成功后的提示如下图所示:

image.png

configture01.png

然后执行 make all 命令开始编译,等待编译结束,编译成功后会在 OpenJDK 8 解压路径下的build 目录生成 windows-x86_64-normal-server-fastdebug 目录,编译后的 JDK 就在这个目录下,如下图所示:

image.png

image.png

进入到 build\windows-x86_64-normal-server-fastdebug\jdk\bin 目录,执行 java -version,就可以看到输出如下图所示:

image.png

这个时候就拥有了一个在自己电脑上编译出来的 JDK 8 了。

编译遇到的问题及解决办法

Your cygwin is too old

执行 ./configure --with-freetype='/cygdrive/e/freetype-2.7' --with-target-bits=64 --enable-debug -disable-ccache 命令后可能会遇到报错提示: Your cygwin is too old.,如下图所示:

image.png

这个是因为 OpenJDK 8 解压路径下的 common\autoconf\generated-configure.sh 脚本有 Bug ,这个脚本中把 Cygwin 的版本写死了,确保你的版本大于 1.7 之后,把这里的版本修改为你自己的版本号即可。如果你的版本和本文使用的版本一致,则直接可以下载替换文件后替换即可,如下图所示:

image.png
image.png

time is more than 10 years from present

执行 make all 命令后,可能会遇到报错提示: time is more than 10 years from present,如下图所示:

compileerror01.png

这个是因为 OpenJDK 8 解压路径下的 jdk\make\src\classes\build\tools\generatecurrencydata\GenerateCurrencyData.java 这个类中校验了不能超过 10 年。可以手动将这里的 10 修改为 100, 或者直接可以下载替换文件后替换即可。替换完成后执行 make clean 命令清理,然后再执行 make all 命令,如下图所示:
在这里插入图片描述
image.png

images-only

执行 make all 命令后,可能会遇到报错提示: Main.gmk:136: images-only] Error 2 ,如下图所示:

image.png

这个是因为 OpenJDK 8 解压路径下的 jdk\make\CreateJars.gmk 文件有两处地方少了回车符号,如下图所示:

image.png

可以手动给这两处增加回车符号,方法为在 insert 模式下,先按 Ctrl + V ,然后再按 Ctrl + M,或者直接可以下载替换文件后替换即可。替换完成后执行 make clean 命令清理,然后再执行 make all 命令编译,如下图所示:


编译成功后输出如下图所示:

image.png

Windows 10 下单步调试 OpenJDK 8

创建调试项目

修改 OpenJDK 8 解压路径下的 hotspot\make\windows\create.bat 脚本中的内容,将脚本中默认的 cygwin64 的安装路径修改为实际的安装路径,如下图所示:

image.png

image.png

image.png

进入到 VS 2010 安装路径下的 VC\bin\amd64,执行 vcvars64.bat,执行完成后不退出这个命令行,如下图所示:

image.png

在同一个命令行进入到 OpenJDK 8 解压路径下的 hotspot\make\windows 目录,执行 create.bat E:\jdk-jdk8-b120\jdk 命令创建 VS 2010 项目文件,如下图所示:

image.png
image.png

配置单步调试

将 OpenJDK 8 解压路径下 build\windows-x86_64-normal-server-fastdebug\jdk\bin\java.diz 解压到所在的路径下,如下图所示:

image.png

用 VS 2010 打开 OpenJDK 8 解压路径下的 hotspot\build\vs-amd64\jvm.vcxproj 文件,如下图所示:

image.png

右键后点击 Properties,配置 Debugging 参数,Configuration 选择 compiler2_fastdebug,Platform 选择 x64,Command 配置编译出来的 java.exe ,Command Arguments 增加 -version 参数,这里相当于就是配置执行 java -version 命令,Environment 配置 JAVA_HOME 为编译出来的 JDK 路径,如下图所示:

image.png

配置完成后,按 F7 重新 build 一下项目,如下图所示:
image.png

image.png

在 OpenJDK 8 解压路径下 share/vm/runtime/arguments.cpp 中的 init_system_properties() 打个断点,如下图所示:

image.png

点击调试按钮后,代码在断点处停下,如下图所示:
image.png

单步调试遇到的问题及解决办法

创建调试项目报错

执行 create.bat 脚本报如下错误:
The code execution cannot proceed because mspdb 100.dll was not found. Reinstalling the program may fix this problem.

createproject01.png

是因为没有在同一个命令行执行 vcvars64.bat创建调试项目

单步调试报错

点击 Debug 按钮启动调试报错如下:
'java.exe': Loaded 'E:\openjdk8\openjdk\build\windows-x86_64-normal-server-fastdebug\jdk\bin\java.exe', Symbols loaded.
'java.exe': Loaded 'C:\Windows\System32\ntdll.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\kernel32.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\KernelBase.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\apphelp.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\advapi32.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\msvcrt.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\sechost.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\rpcrt4.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\user32.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\win32u.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\gdi32.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\gdi32full.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\msvcp_win.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\ucrtbase.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\WinSxS\amd64_microsoft.windows.common-controls_6595b64144ccf1df_6.0.19041.1110_none_60b5254171f9507e\comctl32.dll', Cannot find or open the PDB file
'java.exe': Loaded 'C:\Windows\System32\imm32.dll', Cannot find or open the PDB file
The thread 'Win64 Thread' (0x1048) has exited with code 4 (0x4).
The thread 'Win64 Thread' (0x1efc) has exited with code 4 (0x4).
The program '[2308] java.exe: Native' has exited with code 4 (0x4).

debug01.png

这个需要重新 build 一下项目,见配置单步调试

参考

Win10下编译OpenJDK8
Windows10下编译openjdk8
编译openjdk && 调试java
Windows10下vs2010单步调试jvm
Java虚拟机原理分析之Win7下VS2010编译OpenJDK8与单步调试HotSpot VM过程详细记录
building open jdk 8

标签:10,java,Windows,OpenJDK,如下,编译,所示,dll
From: https://www.cnblogs.com/sparkchan/p/18610142

相关文章

  • Java程序员面试1000问,花点耐心看完offer拿到手软
    前言:本文收集整理了各大厂常见面试题N道,你想要的这里都有内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、Redis、MySQL、Spring、SpringBoot、SpringCloud、RabbitMQ、Kafka、Linux等技术栈,希望大家都能找到适合自己的公司,开开心心的撸代码。目录:......
  • 代码随想录算法训练营第四十四天|leetcode1143.最长公共子序列、leetcode1035.不相交
    1leetcode1143.最长公共子序列题目链接:1143.最长公共子序列-力扣(LeetCode)文章链接:代码随想录视频链接:动态规划子序列问题经典题目|LeetCode:1143.最长公共子序列哔哩哔哩bilibili思路:其实我比较清楚的是和上面一道题目的思路,差不太多,但是我不知道非连续的位置应该如何......
  • Win10 wsl 迁移到 D 盘
    wsl关闭wsl--shutdown查看系统wsl--list导出tar文件wsl--exportUbuntu-24.04D:/export.tar删除C盘的虚拟机wsl--unregisterUbuntu-24.04导入新的虚拟机wsl--importUbuntu-24.04D:\wsl\D:\export.tar--version2查看状态https:/......
  • 深度解密企业培训10强:从技术革新到业务落地的实战路径
    如何选取优质的企业培训机构合作伙伴,为企业内部的人才成长与业务升级提供有力支撑。这个选择过程从来不止是简单的“一次采购”或“临时救火”,而更像是长期的、动态演进的人才战略布局——无论是聚焦高管层的战略认知升级,还是面向业务一线的专业技能赋能,企业培训已不再是边缘附......
  • 超大规模数据库集群保稳系列:数据库攻防演练建设实践10
     01背景1.1初识混沌工程首先我们先了解一下什么是混沌工程?简单而言,混沌工程是在系统上进行实验的技术手段,目的是建立对系统抵御生产环境中失控条件的能力以及信心。这主要体现在两个方面,从系统角度来讲,混沌工程可以提升我们架构的容错能力和韧性,降低故障发生率和复发率,提......
  • 软件缺少d3dx10_38.dll文件及错误提示问题
    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或没有安装一些系统软件平台所需要的动态链接库,这时你可以下载这个d3dx10_38.dll文件(挑选合适的版本文件)把它......
  • Windows 下将无线网卡变 WiFi 热点
    首先打开cmd运行如下命令确认当前无线网卡是否支持承载网络:netshwlanshowdrivers若显示支持的承载网络:是则可继续,否则代表无线网卡不支持变热点。先设置网络配置:netshwlansethostednetworkmode=allowssid=wifinamekey=password即设置WiFi名称为wifiname,密码......
  • YOLO11-seg分割:包裹分割数据集 | 全局到局部可控感受野模块GL-CRM ,量身为为多尺度变化
    ......
  • AI绘画,100w+播放封神!1分钟教你制作AI视频!各地的守护神终于出现了
    哈喽这里是海绵前言神兽教程这种视频怎么做,Lison也是熬夜很快写了拆解教程~一、获取提示词首先在Kimi或者GPT上可以查询各个省份的特色动物是什么,用各个省份的特色动物去做这样的图会更有归属感一些。例如四川是大熊猫,甘肃是马,东北是东北虎,重庆是金丝猴,河南有......
  • 手写 VGG 网络模型实现 CIFAR10 数据集分类
    VGG网络VGG是一个经典的卷积神经网络(CNN)架构,由牛津大学的视觉几何组(VisualGeometryGroup)在2014年提出。VGG网络因其简单而有效的设计而闻名,在图像识别领域取得了很好的效果。VGG网络的主要特点是:深度:VGG网络非常深,原始的VGG网络有16层(包括卷积层和全连接层),后来简化为1......