在Windows10上编译OpenJDK15的流程和思路

所用工具

  • Windows10 64位
  • OpenJDK15 源文件
  • OracleJDK15
  • Visual Studio 2019
  • cygwin 3.1

背景知识

JDK,JRE,SDK,JVM

什么是 JDK,JRE,SDK,JVM?

  • JDK (Java Development Kit)Java开发工具箱, JRE (Java Runtime
    Environment)Java运行时环境, SDK(Software Development Kit)软件开发工具箱,JVM(Java Virtual Machine)Java虚拟机.
  • SDK是广义上的软件开发包,JDK特指JAVA软件开发包。所以定义范畴上SDK包括JDK。

他们的包含关系是JDK->JRE->JVM,JVM是直接和操作系统沟通的。

为什么要编译JDK,为什么使用OpenJDK?

  • 从历史上来讲OpenJDK是开源的,OracleJDK是收费的的。但是库的代码基本相同,其中只有极少不同不同代码来实现了极其相同的功能。
  • OpenJDK完全开源,可以看全部源码,OracleJDK部分开源,可以看部分源码。

所以我们可以通过OpenJDK查看源码,也可以通过改写openJDK源码编译出自己的JDK,来学习JAVA源码的奥秘。

JDK 源文件

JDK源文件是.java文件, .h文件, .cpp文件等等(JDK源码是用C,C++,和JAVA共同完成的,但也包括了.sh文件等帮助编译和其他功能的代码。)

所以JDK源码编译不但需要 C compiler,也需要已经编译好的JDK来进行编译。

所需工具

Cygwin 3.1

Cygwin是一个在windows上模拟Linux环境的工具,我们需要Linux平台下的GNU make等其他工具来帮助我们build整个JDK。

我们进行Default安装,默认安装在C盘根目录下。

然后输入命令:

<path to Cygwin setup>/setup-x86_64 -q -P autoconf -P make -P unzip -P zip

setup-x86_64 是Cygwin安装程序,此语句用来额外安装 autoconf,make,unzip和zip四个工具。
下载地址: http://www.cygwin.com/

Visual Studio 2019

  • 刚才提到JDK有一部分是用C和C++编写的,所以需要 Windows SDK来进行编译,官方文档中同时写道OpenJDK就是在Visual
    Studio环境下编译完成的。

  • 安装时,我们需要勾选使用C++的桌面开发,其中含有我们需要的Windows SDK 即 C compiler.
    在Windows10上编译OpenJDK15的流程和思路_第1张图片

下载地址 : https://visualstudio.microsoft.com/zh-hans/downloads/

已经编译好的JDK14或15

听起来很奇怪,已经有了编译好的JDK,我们还编译什么呢?这是由于很大一部分JDK源码是用Java写成的,我们需要一个BootStrap JDK来编译JAVA代码 所需的JDK应该是同版本号或同版本-1的。eg:编译OpenJDK15我们需要JDK14或15。

下载地址: https://www.oracle.com/java/technologies/javase-downloads.html

OpenJDK15 源码

下载地址:http://openjdk.java.net/

具体步骤

configure

首先需要使用autoconf来指定JDK如何生成,并且检查所需的环境和安装项目是否可以进行make.

(下面所说dir代表JDK源码解压后的根目录)

首先需要使用autoconf。我们在cygwin中调用
( dir 代表JDK源码解压后的根目录)

  dir/configure  

这是一个wrapper文件,实际上来调用

  dir/make/autoconf

最终调用

  dir/build/.configure-support/generated-configure.sh

( dir 代表JDK源码解压后的根目录)。遇到报错根据config.log和configure.log中的提示进行debug。
指令: ./configure +Arguments

eg:./configure --with-devkit=/cygdrive/d/Program_Files_x86

注意:其中的path应写为Linux style

eg: windows下的路径 C:\Program\editor
在此处应写为 cygwin/c/Program/editor
(这代表cygwin的虚拟路径,c为盘符)

  • 如下的 Arguments 可以指定configure时需要的程序的路径及参数等
--with-devkit= - Use this devkit for compilers, tools and resources
--with-sysroot= - Use this directory as sysroot
--with-extra-path=[;] - Prepend these directories to the default path when searching for all kinds of binaries
--with-toolchain-path=[;] - Prepend these directories when searching for toolchain binaries (compilers etc)
--with-extra-cflags= - Append these flags when compiling JDK C files
--with-extra-cxxflags= - Append these flags when compiling JDK C++ files
--with-extra-ldflags= - Append these flags when linking JDK libraries

更多Aruguments可见JDK源码中的文件:dir/doc/building.html

make

make 便是调用configure步骤已经生成好的配置文件 来进行编译。
直接在cygwin中输入make

  make

test

test 测试已经生成的JDK是否可用。具体使用的test suit因人而异,可见jdk源码文件夹下的test文档。

最基本的test

 make run-test-tier1

注意事项

  • 最好将所有文件放在非中文路径,并且路径中不要包含空格和()括号等,引起不必要的麻烦。
  • 有可能会出现很多因人而异的Bug,在万行以上的代码中debug实属不易,有条件可以尝试Linux,MacOS等平台。
  • 在操作之前请先阅读JDK源码中的官方文档。

你可能感兴趣的:(java虚拟机,java,jdk,windows,10,cygwin,openjdk)