Windows 10 下编译 64 位 OpenJDK 8

软件版本

  • 操作系统:Windows 10

  • Cygwin:3.5.4-1

  • Visual Studio:2010 英文版

  • freetype: 2.7

  • Boot JDK:7

  • 编译的 OpenJDK 版本:8

安装 boot JDK

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

在已有的 Path 环境变量加入 %JAVA_HOME%\bin ,如下图所示:

配置完成后在 cmd 中执行 java -version 命令,可以看到对应的版本信息,则证明已配置好,如下图所示:

安装 Cygwin

下载链接下载安装程序,然后在 Windows 上安装。

设置安装的路径,这里设置的是 E:\cygwin64,如下图所示:

选择要额外安装的命令,包括:binutilscpiom4makeprocps-ngunzipzip

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

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

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

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

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

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

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

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

安装 VS 2010

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

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

安装的特性只需要勾选 Visual C++,如下图所示:

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

下载并编译 freetype

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

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

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

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

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

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

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

然后在 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 的路径,执行成功后的提示如下图所示:

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

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

这个时候就拥有了一个在自己电脑上编译出来的 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.,如下图所示:

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

time is more than 10 years from present

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

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



images-only

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

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

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

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

Windows 10 下单步调试 OpenJDK 8

创建调试项目

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

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

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

配置单步调试

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

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

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

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

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

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

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

创建调试项目报错

执行 create.bat 脚本报如下错误:

The code execution cannot proceed because mspdb 100.dll was not found. Reinstalling the program may fix this problem.

是因为没有在同一个命令行执行 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).

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

参考

Win10下编译OpenJDK8

Windows10下编译openjdk8

编译openjdk && 调试java

Windows10下vs2010单步调试jvm

Java虚拟机原理分析之Win7下VS2010编译OpenJDK8与单步调试HotSpot VM过程详细记录

building open jdk 8

Windows 10 下编译 64 位 OpenJDK 8 并单步调试的更多相关文章

  1. Windows 10下mysql 64位 安装(mysql-5.7.11-winx64安装)

    Windows下mysql 64位 安装(mysql-5.7.11-winx64安装) 系统Windows10 安装包mysql-5.7.11-winx64.zip 安装过程中遇到的问题,请留意4.0 ...

  2. windows 下编译64位ffmpeg

    window下如何编译ffmpeg 前文已有介绍,前面介绍的都是如何编译32位的库,本文主要介绍window 下如何编译64位ffmpeg库. 一.搭建编译环境 1.下载 windows下编译64位F ...

  3. Windows下编译64位GSL

    GSL (GNU Scientific Library, http://www.gnu.org/software/gsl/)官方并没有提供编译好的Windows版本.首先要保证Windows是64位的 ...

  4. VS2015下编译64位GDAL总结

    使用VS2015编译最新的64位GDAL(最新gdal2.11),确实有一些问题,看来双方还是太新了,有点不兼容,特总结如下. 以前经常用的通过VisualStudio IDE进行编译的方式现在似乎不 ...

  5. 无光驱在32位windows系统下安装64位windows系统

    位的系统. 大家都知道,32位的操作系统最多只能支持3.2G的内存,现在内存白菜价,很多人都在原有基础上购入新内存,这样最少也有4G了,为了让内存不浪费,我 们只有升级到64位操作系统.但是很多朋友又 ...

  6. windows平台vs2010编译64位libiconv与libxml2

    (一)安装libiconv下载路径https://ftp.gnu.org/pub/gnu/libiconv/注意这里选择libiconv-1.11.1版本,因为之后的版本没有Makefile.msvc ...

  7. 在64位linux下编译32位程序

    在64位linux下编译32位程序 http://blog.csdn.net/xsckernel/article/details/38045783

  8. 基于TDengine-ver-1.6.4.4在windows 10下cmake+msys2编译(windows cgo 使用)

    目录 基于TDengine-ver-1.6.4.4在windows 10下cmake+msys2编译(windows cgo 使用) 背景 下载地址 仓库地址 安装部署 msys2 安装 配置环境变量 ...

  9. 编译并使用boost库(win7+boost1.63+vs2015+32位or 64位),超详细,boost于vs2017下编译(64/32bit)

    首先下载得到boost的最新版(目前最新版是1.63) 下载地址: http://www.boost.org   也可以从这里直接下载 http://download.csdn.net/detail/ ...

  10. ubuntu15.10下编译安装wine1.8 rc4

    ubuntu15.10下编译安装wine1.8rc4 Wine (“Wine Is Not an Emulator” 的递归缩写)是一个能够在多种 POSIX-compliant 操作系统(诸如 Li ...

随机推荐

  1. C++ 第四节课 C和C++指针的区别 C的宏函数和C++内联函数的优缺点

    #include <iostream> // 定义一个宏函数 #define ADD(x,y) x+y; // 宏函数具有速度快等特点 但是写代码有些业务比较繁琐,所以C++中使用了内联函 ...

  2. 如何判断 js 的数据类型

    js 数据类型 一共 7 种 undefined . null . number . string . boolean .object . symbol 其中 object 可以细分 位 数组对象  ...

  3. 全网最适合入门的面向对象编程教程:57 Python字符串与序列化-序列化与反序列化

    全网最适合入门的面向对象编程教程:57 Python 字符串与序列化-序列化与反序列化 摘要: Python 序列化与反序列化是将 Python 对象转换为字节流(序列化)以便存储或传输,和将字节流转 ...

  4. 妙用编辑器:把EverEdit变成计算器

    妙用编辑器:把EverEdit变成计算器 应用场景 日常工作过程中,会存在需要计算一些数据的场景,调用系统的计算器当然可以完成这项工作,但是需要来回切换,且系统自带的计算器没有表达式计算功能,真是不方 ...

  5. 云原生周刊:2024 年 K8s 基准报告 | 2024.4.8

    开源项目推荐 Argo CD Image Updater Argo CD Image Updater 是一个自动更新 Argo CD 管理的 Kubernetes 工作负载容器镜像的工具.简而言之,它 ...

  6. 【小记】Docker容器间SSH公钥自动交换实现免密登录的一次尝试

    咋想到这茬了 最近开始忙毕设的事儿了,想部署个伪分布式的Spark + Hadoop集群来进行测试.思来考去,最终咱把目光放在了Docker上. 盘了两天,发现这玩意意外的有趣,镜像构建好后开箱即用, ...

  7. Cargo deny安装指路

    本博客所有文章除特别声明外,均采用CC BY-NC-SA 4.0许可协议.转载请注明来自 唯你 简介 cargo deny 是一个 Rust 工具,用于检查项目依赖项的许可证.安全性和其他合规性问题. ...

  8. zkw 线段树-原理及其扩展

    前言 许多算法的本质是统计.线段树用于统计,是沟通原数组与前缀和的桥梁. <统计的力量>清华大学-张昆玮 关于线段树 前置知识:线段树 OIWiki. 线段树是一种专门维护区间问题的数据结 ...

  9. pycharm配置默认镜像地址

    使用pycharm编写接口自动化测试时,需要下载很多安装包,不指定镜像时下载可能很慢,可以设置默认镜像 命令:pip config set global.index-url 镜像地址 查看已设置的默认 ...

  10. 通过Java代码发送OutLook邮件

    准备 我们想通过Java代码实现发送OutLook邮件,必须准备以下材料: OutLook邮箱 目标邮箱 查看OutLook邮箱信息 打开OutLook邮箱,在Settings中搜索或找到SMTP: ...