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

本文详细记录了在Windows 10环境下,使用Visual Studio 2017编译OpenJDK8和调试HotSpot VM的过程,包括配置环境、解决找不到VS的问题、编译过程中遇到的错误及解决方案,最后成功编译并通过调试。
摘要由CSDN通过智能技术生成

在上一篇文章《Java虚拟机原理分析之Win7下VS2010编译OpenJDK8与单步调试HotSpot VM过程详细记录》中,我们在Win7+VS2010环境下成功编译出了x86版本的OpenJDK。然而VS2010毕竟有些年头了,我也只是在开发机上才装了这个经典的VS版本,而在自己的电脑上使用的是VS2017。而通过远程桌面连到开发机是一件很不爽的事,并且VS2010的IDE自然是不如VS2017的好用。因此萌发了使用VS2017编译OpenJDK的想法,然而经过搜索并没能在网上找到类似的文章和教程,于是只得靠自己摸索了。

首先放上我的环境信息:

  1. Microsoft Windows 10 LTSB 2016版本(补丁更新到最新)

  2. Visual Studio 2017(补丁更新到最新,装有VisualAssistX插件)

  3. JDK Win64 8u152版本

  4. Cygwin x64版本,已装好了需要的组件

  5. freetype 2.81版本,已用VS2017编译好x86的Dll版本,放在I:\jvm\freetype目录下

  6. OpenJDK v8源码最新版本,放在I:\jvm\jdk8u-dev目录下

  7. msvcr100.dll的x86版本(只是用来骗配置过程的),放在I:\jvm\目录下

由于之前已经详细记录过Win7下使用VS2010编译x86版本OpenJDK的过程了,因此这里对于重复部分就不再详细讲解了,直接一句话带过,如有需要可以参考上一篇文章中的详细记叙。

配置

解决找不到VS的问题

下载好源码、安装好Cygwin及工具并编译生成dll版本的typefree(这部分操作与VS2010编译时一致,在此不再赘述),然后使用如下命令:

bash ./configure --with-freetype=/cygdrive/i/jvm/freetype -with-target-bits=32 --with-debug-level=slowdebug --with-jvm-variants=client

接着在寻找VS时会报错:

2017-12-19_132105

打开/common/autoconf/generated-configure.sh文件,搜索“Cannot locate a valid Visual Studio”进行定位,发现可以通过传入–with-tools-dir参数指定vcvars32.bat的路径,从而定位到头文件、库文件等的路径。针对VS2017,该批处理位于以下路径:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\VC\Auxiliary\Build

修改代码,主要匹配其vcvars32.bat和VS100BASE路径。值得注意的是,VS2017默认的vcvars32xp.bat没有包含WinSDK 7.1,并且生成的可执行文件也无法在XP上运行。因此拷贝vcvars32.bat为vcvars32xp.bat,修改其内容如下:

@call "%~dp0vcvarsall.bat" x86 %*
set INCLUDE=%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.1A\Include;%INCLUDE%
set PATH=%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.1A\Bin;%PATH%
set LIB=%ProgramFiles(x86)%\Microsoft SDKs\Windows\v7.1A\Lib;%LIB%
set CL=/D_USING_V110_SDK71_;%CL%
set LINK=/SUBSYSTEM:CONSOLE,5.01 %LINK%

然后对generated-configure.sh文件中的代码进行修改:

# First-hand choice is to locate and run the vsvars bat file.
  if test "x$OPENJDK_TARGET_CPU_BITS" = x32; then
    VCVARSFILE="VC/Auxiliary/Build/vcvars32xp.bat"  # 这里改为VS2017的路径
  else
    VCVARSFILE="VC/Auxiliary/Build/vcvars64.bat"    # 这里改为VS2017的路径
  fi

  VS_ENV_CMD=""
  VS_ENV_ARGS=""
  if test "x$with_toolsdir" != x; then

  if test "x$VS_ENV_CMD" = x; then
    VS100BASE="$with_toolsdir/../../.."               # 这里改为VS2017的路径
    METHOD="--with-tools-dir"

修改后,重新输入配置命令如下:

bash ./configure --with-freetype=/cygdrive/i/JVM/freetype -with-target-bits=32 --with-debug-level=slowdebug --with-jvm-variants=client with_toolsdir="/cygdrive/c/Program Files (x86)/Microsoft Visual Studio/2017/Enterprise/VC/Auxiliary/Build"

执行后继续报错:

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值