JVM学习(一)windows平台编译调试jdk14

(一)windows平台编译调试jdk14

写在前面

为了学习jvm编译jdk,顺便学习源码,因为手上其他环境配置不够只好使用windows平台安装,如果可以使用linux、unix平台,最好不要在windows上构建,真的坑很多很麻烦
源码使用的是OpenJDK14 的 EA(Early Access抢 先体验版),引导jdk使用jdk13
可以参考源码下doc/building.html
源码下载地址

环境要求

1. windows10 x64
2. cygwin --在window平台模拟unix
3. vs2017 professional
4. jdk13 (做为boot jdk) – 编译版本为14 其他版本顺次向前推

注意事项

  1. 将下载的源码项目文件使用idea或其他工具转换换行符(windows平台换行符为\r\n unix\linux平台为\n 如果不转换会导致脚本运行失败)如果是在windows平台这步一定要做
  2. 如果是64位系统注意各软件也为x64版本,否则会出现一些意外的错误
  3. vs一定要英文版,不能安装中文语言包,否则check编译条件时会各种报错,需要你修改generated-configure.sh解决问题

编译过程

1.下载安装cygwin64

除了基本的Cygwin安装之外,还必须安装以下软件包:

  • autoconf
  • make
  • zip
  • unzip
可以使用以下命令行安装这些软件包:
<path to Cygwin setup>/setup-x86_64 -q -P autoconf -P make -P unzip -P zip
2. 下载freetype

https://download.savannah.gnu.org/releases/freetype/freetype-2.5.3.tar.gz

下载后解压,freetype的编译参考https://blog.csdn.net/wqlinloveruby/article/details/80409031

3.安装英文版 vs2017

再次强调安装时一定不要安装中文语言包,否则后面会报错
在这里插入图片描述

4.运行configure

进行到这里还顺利?ok,接下来先做两件事
第一删除系统的JAVA_HOME环境变量。
第二,控制面版-区域和时间-区域 里第一个页签找到语言环境,选择英语(美国).

打开cygwin窗口操作不要用cmd,否则会报错
在这里插入图片描述
cd 进入src目录下

#参数的详细信息参考build.html
bash ./configure --with-freetype-lib=[路径]/freetype-2.5.4/lib  --with-target-bits=64  --disable-warnings-as-errors --with-boot-jdk=[路径]/java13 --enable-debug --with-jvm-variants=server --with-freetype-include=[路径]/freetype-2.5.4/include

原来的参数–with-freetype被拆分为两个参数: (详情查看configure --help),这一点build文档似乎没有更新

--with-freetype=[lib路径]
#变更为下面两个参数
#两个参数要么都设置要么都不设置
--with-freetype-include=[路径/freetype-2.5.4/include]
--with-freetype-lib=[路径/freetype-2.5.4]

执行成功后你会看到类似如下内容

====================================================
A new configuration has been successfully created in
/cygdrive/i/jdk13/src/build/windows-x86_64-server-fastdebug
using configure arguments '--with-freetype-lib=/cygdrive/i/jdk13/freetype-2.5.4/lib --with-target-bits=64 --disable-warnings-as-errors --with-boot-jdk=/cygdrive/e/java/java/java13 --enable-debug --with-jvm-variants=server --with-freetype-include=/cygdrive/i/jdk13/freetype-2.5.4/include'.

Configuration summary:
* Debug level:    fastdebug
* HS debug level: fastdebug
* JVM variants:   server
* JVM features:   server: 'aot cds cmsgc compiler1 compiler2 epsilongc g1gc graal jfr jni-check jvmci jvmti management nmt parallelgc serialgc services shenandoahgc vm-structs'
* OpenJDK target: OS: windows, CPU architecture: x86, address length: 64
* Version string: 14-internal+0-adhoc.sang.src (14-internal)

Tools summary:
* Environment:    cygwin version 3.1.4(0.340/5/3) (root at /cygdrive/e/Cygwin)
* Boot JDK:       java version "13.0.2" 2020-01-14  Java(TM) SE Runtime Environment (build 13.0.2+8)  Java HotSpot(TM) 64-Bit Server VM (build 13.0.2+8, mixed mode, sharing)   (at /cygdrive/e/java/java/java13)
* Toolchain:      microsoft (Microsoft Visual Studio 2017)
* C Compiler:     Version 19.16.27038 (at /cygdrive/c/progra~2/micros~3/2017/profes~1/vc/tools/msvc/1416~1.270/bin/hostx86/x64/cl)
* C++ Compiler:   Version 19.16.27038 (at /cygdrive/c/progra~2/micros~3/2017/profes~1/vc/tools/msvc/1416~1.270/bin/hostx86/x64/cl)

Build performance summary:
* Cores to use:   4
* Memory limit:   16246 MB

执行make images
# 执行make images等待编译完成
make images
5.执行中的错误
5.1 freetype 参数错误
#执行后出错
Only bundled freetype can be specified on Mac and Windows

解决方法

修改make/autoconf/lib-freetype.m4,找到’Only bundled freetype can be specified on Mac and Windows’。
注释这段if,或者把AC_MSG_ERROR改成AC_MSG_RESULT。

5.2 make过程报错
$ make images

Building target 'images' in configuration 'windows-x86_64-server-fastdebug'
make[3]: *** 没有规则可制作目标“/cygdrive/i/jdk13/src/build/windows-x86_64-server-fastdebug/buildtools/langtools_tools_classes/_the.BUILD_TOOLS_LANGTOOLS.vardeps”,由“/cygdrive/i/jdk13/src/build/windows-x86_64-server-fastdebug/buildtools/langtools_tools_classes/_the.BUILD_TOOLS_LANGTOOLS_batch” 需求。 停止。
make[3]: *** 正在等待未完成的任务....
make[2]: *** [make/Main.gmk:70:buildtools-langtools] 错误 2
make[2]: *** 正在等待未完成的任务....
make[3]: *** 没有规则可制作目标“/cygdrive/i/jdk13/src/build/windows-x86_64-server-fastdebug/make-support/vardeps/make/ModuleWrapper.gmk/java.base/ORDERED_CFG_VARIANTS.vardeps”,由“/cygdrive/i/jdk13/src/build/windows-x86_64-server-fastdebug/support/modules_libs/java.base/jvm.cfg” 需求。 停止。
make[3]: *** 正在等待未完成的任务....
make[2]: *** [make/Main.gmk:158:java.base-copy] 错误 2

ERROR: Build failed for target 'images' in configuration 'windows-x86_64-server-fastdebug' (exit code 2)

No indication of failed target found.
Hint: Try searching the build log for '] Error'.
Hint: See doc/building.html#troubleshooting for assistance.

make[1]: *** [/cygdrive/i/jdk13/src/make/Init.gmk:312:main] 错误 2
make: *** [/cygdrive/i/jdk13/src/make/Init.gmk:186:images] 错误 2

解决方法

卡在这里了,慢慢解决…

参考
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
### 回答1: JVMJava虚拟机)是Java程序运行的环境,它是一个能够执行Java字节码的虚拟机。JVMJava字节码翻译成可被物理机器执行的指令,同时还提供了内存管理、垃圾回收、安全机制等功能,使得Java程序在不同的操作系统上能够运行。 JDKJava开发工具包)是Java开发的基础工具集合,它提供了编写、编译调试和运行Java程序的工具。JDK包括了JRE和开发工具,如编译器(javac)、调试器(jdb)、自动构建工具(Ant/Maven/Gradle)等。通过JDK,开发者可以创建和开发Java应用程序。 JRE(Java运行环境)是Java应用程序运行所需的核心组件集合,包括JVM和一些基础类库。JRE只能用于运行Java程序,而不能用于开发Java程序。当一个Java程序被编译完成后,它就能在安装了JRE的机器上运行。 总结来说,JVMJava程序运行的环境,JDK是用于开发Java程序的工具集合,而JRE是运行Java程序所必需的核心组件集合。 ### 回答2: JVMJava虚拟机)是Java编程语言的核心组件之一。它是一种虚拟计算机,可以在各种操作系统上运行Java字节码。JVM负责将Java源代码编译成可执行的字节码,并提供了内存管理、垃圾回收、安全性和线程同步等功能。JVM不只是一个程序,它是一种执行环境,可以运行Java程序。 JDKJava开发工具包)是Java应用程序开发的软件包。它包含了JVM和其他用于开发Java应用程序的工具,如编译器(javac)、调试器(jdb)和执行器(java)。JDKJava开发者所需的基本工具,它提供了编译、运行和调试Java程序的功能,以及许多其他开发所需的库和工具。 JRE(Java运行时环境)是JVM的一种实现,提供了执行Java字节码的运行环境。它包含了JVM、运行时类库和其他支持组件,可以让用户在计算机上运行已编译Java程序。JRE只能运行Java程序,而无法进行Java应用程序的开发。 简而言之,JVMJava程序的执行环境,JDK是开发Java程序所需的工具包,JRE是运行已编译Java程序的环境。在开发Java应用程序时,需要安装JDK来编写、编译调试代码;而在用户计算机上运行Java程序时,只需要安装JRE即可。 ### 回答3: JVMJava Virtual Machine)是Java虚拟机的缩写,是Java程序运行的基础。它是一个执行Java字节码的虚拟计算机,负责解释和执行Java程序。JVM是跨平台的关键,因为Java程序可以在不同操作系统上运行,只需要安装对应的JVM即可。JVM还负责垃圾回收、内存管理等任务,使得Java程序具有自动内存管理的优势。 JDKJava Development Kit)是Java开发工具包的缩写,它是开发Java应用程序的必备工具。JDK提供了Java编译器(javac)用于将Java源代码编译成字节码,还提供了用于调试和运行Java程序的工具。JDK中还包括了丰富的Java类库,开发者可以利用这些类库快速构建Java应用程序。 JRE(Java Runtime Environment)是Java运行时环境的缩写,它提供了Java程序运行所需的所有运行时环境。JRE包含了JVM和一些必要的类库,用于解释和执行Java字节码。当用户想要运行Java程序时,只需要在自己的计算机上安装JRE即可,而无需安装整个JDK。 总结起来,JVMJava程序的运行平台,负责解释和执行Java字节码;JDKJava开发工具包,用于开发Java应用程序,并包含了编译器和一些开发工具;JRE是Java运行时环境,包含了JVM和一些必要的类库,用于运行Java程序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值