先前准备,oracle官网下载jdk11,安装好,并配置好环境变量,用来编译openjdk12使用的。
下载openjdk12的源码,下载地址:https://jdk.java.net/java-se-ri/12
下载cgywin,是一个在windows上面运行的类似于linux环境的。下载地址:http://www.cygwin.com/,安装插件的时候,推荐选用国内的镜像,http://mirrors.163.com/cygwin/。
安装vs2017。去微软官网下载就可。
1.https://sourceforge.net/projects/freetype/files/地址下载freetype。解压之后,放在D盘,然后用vs0217打开D:\freetype-2.11.0\builds\windows\vc2010目录的freetype.sln文件,编译。把生成在软件根目录的objs里面lib和dll文件复制出来,放在新建的lib文件里面,配置环境变量FREETYPE_CFLAGS:D:\freetype-2.11.0\include与FREETYPE_LIBS:D:\freetype-2.11.0\lib,放到Path里:%FREETYPE_CFLAGS% %FREETYPE_LIBS%。后期编译openjdk前环境配置需要的!
2.cygwin安装的时候记得勾选make插件,版本必须是4.2.x,我选择的是4.2.1,不然后期编译make all的时候会报下面异常!
$ 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
cygwin安装好了之后,记得安装其他三个插件/setup-x86_64 -q -P autoconf -P unzip -P zip(用cmd切换到之前下载好setup-x86_64的目录执行脚本),当然这三个插件也可以安装的时候同make一样勾选也可
。
3.前面下载好的openjdk源码解压在cygwin用户的根目录里面,然后编译./configure --enable-debug --with-target-bits=64 --disable-warnings-as-errors
windows环境会报以下异常,提供修复办法
编译OpenJDK12:a microsoft compiler is required
make/autoconf目录下,有一个toolchain.m4,打开,找到compiler is required或者Thre result from running it was:
注释相应的AC_MSG_ERROR()这一段if,或者把AC_MSG_ERROR改成AC_MSG_RESULT。
error: Target CPU mismatch. We are building for x86_64 but CL is for "?"; expected "x64".
找到make/autoconf目录下,有一个toolchain.m4,注释相应的AC_MSG_ERROR()这一段if,或把AC_MSG_ERROR改成AC_MSG_RESULT,找到了cl.exe,识别不到版本,不管他!
编译OpenJDK12:Only bundled freetype can be specified on Mac and Windows
打开make/autoconf/lib-freetype.m4,找到这一句。注释这一段if,或者把AC_MSG_ERROR改成AC_MSG_RESULT。
c:/cygwin64/home/Administrator/jdk12/test/hotspot/gtest/utilities/test_json.cpp 语法错误
解决办法删除test_json.cpp!
上面解决好了之后。
4.调试:
刚刚make all生成了exe,现在使用$make hotspot-ide-project。生成vs工程文件,位于openjdk12/build/windows-x86_64-server-fastdebug/ide/hotspot-visualstudio/jvm.vcxproj,双击打开载入即可,上方选择server-fastdebug即可开始调试。调试可能遇到safefetch32抛出异常,这是正常情况,该异常会被外部SEH捕获,直接继续调试就好。在share\runtime\javaCalls.hpp中的call函数处下断进行调试!
原文:https://www.cnblogs.com/ykpkris/p/15058656.html