win10-x64系统下编译OpenJDK

5 篇文章 0 订阅

win10-x64系统编译OpenJDK

目录

本文主要讲解在win10环境下编译OpenJDK遇到的问题和解决办法,在此先声明一下在windows系统上编译OpenJDK会遇到一些很坑的问题,如果不介意系统的话还是推荐在Linux上编译。
如果您非要使用windows编译OpenJDK,那么我建议装软件的时候一定要装英文版,否则会出现一些很奇葩的问题。好了接下来让我们开启编译OpenJDK之旅吧。

下载OpenJDK源码

首先我们需要下载OpenJDK源码,这里的版本选择编译OpenJDK8,我在编译7的时候总是报错,看提示像是类库版本不兼容,换了8就没有这个问题。
下载OpenJDK源码有两种方式

  • 通过版本控制器Mercurial下载
  • 直接下载zip源码包

这里我们选择比较简单的第2种,点击OpenJDK8源码压缩包下载源码包并解压到本地。

配置编译环境

使用windows编译最麻烦的地方就在于编译环境的搭建,环境搭建有很多方法,但是基本思路都是一样,就是在windows上模拟linux,一般在win系统上有两种软件可以完成这类的需求,cygwin和mingw,这里我们选择cygwin。
进入到刚才解压的OpenJDK目录,点击README-builds.html。这个文件是官方出品的编译OpenJDK的教程,里面涉及到几种不同的系统,由于我们是在windows下进行编译,因此只关注其中和windows相关的部分。

安装cygwin

为了模拟linux,需要安装cygwin,点击cygwin安装包下载当前最新的版本,点击安装即可,根据官方的安装简介,以下几类package是必须要安装的。

Binary NameCategoryPackageDescription
ar.exeDevelbinutilsThe GNU assembler, linker and binary utilities
make.exeDevelmakeThe GNU version of the ‘make’ utility built for CYGWIN
m4.exeInterpretersm4GNU implementation of the traditional Unix macro processor
cpio.exeUtilscpioA program to manage archives of files
gawk.exeUtilsawkPattern-directed scanning and processing language
file.exeUtilsfileDetermines file type using ‘magic’ numbers
zip.exeArchivezipPackage and compress (archive) files
unzip.exeArchiveunzipExtract compressed files in a ZIP archive
free.exeSystemprocpsDisplay amount of free and used memory in the system

在安装完这些package后,编译过程中还是报了一个找不到cmp的错,感觉是这个列表少了一项,通过搜索资料发现缺少diffutils包,安装diffutils包即可。
安装界面

安装编译器

官网推荐的编译器为Visual Studio 2010 Compilers,下载安装 Microsoft Visual Studio C++ 2010 (VS2010) Professional Edition or Express compiler即可。注意这里最好安装英文版,如果安装中文版后面会遇到很多问题,如果您一定要安装中文版,做好后面各种报错的准备(博主安装的就是中文版被它虐的不行)。

安装freetype

关于freetype这块官方的编译教程中并没有提及,因此在这吃了不少亏。由于字体的原因需要用到freetype,如果是32位的系统网上可以找到已经编译好的二进制文件。我的系统是64位因此自己用VS2010编译了一个freetype。点击freetype下载源码并解压。将工程导入VS2010选择Release Multithreaded和x64版本使用快捷键F7进行编译。在编译OpenJDK环境配置这一步一直报错,最后是通过查看它的shell代码才找到了原因。这里我们不仅需要dll文件还需要lib文件,都是用同一个工程编译出的只是后缀不太一样。可以通过在项目上右击点属性查看当前编译的二进制文件是什么格式的,如下图:
查看编译属性
我电脑上默认的是编译成dll文件,如果要编译成lib文件修改目标文件扩展名和配置类型为.lib重新编译即可。
编译完后在C盘下新建freetype目录,并且在该目录分别建立两个子目录名字为include和lib,子目录的名字不能变否则后面检查编译环境的时候会通不过。将dll和lib文件放到lib目录,同时将freetype源码include目录下的ft2build.h放到include目录下。

configure检测编译环境

进入cygwin bash环境,cd切换到openjdk目录执行bash ./configure –with-freetype=/cygdrive/c/freetype –enable-debug –with-target-bits=64
解释一下这个命令的含义,–with-freetype指定freetype的目录,如果不指定会去C:\Program Files\GnuWin32目录下查找,后面两个编译选项指定要编译出64位的debug版本。
如果cygwin安装的是2.X的版本则在编译的过程中会报cygwin的版本太老,这是检测脚本的一个bug,该脚本在common/autoconf目录下使用文本编辑器打开generated-configure.sh搜索Your cygwin is too old,关注7220行原来是1.7这里我根据自己的cygwin版本改成了2.6。

关于freetype的坑,首先64系统需要freetype 64的版本前面我们自己编译了已经,实际上我在编译OpenJDK的时候这块一直报错找不到合适的freetype,最后通过修改编译脚本增加日志才找到原因:

可以看到脚本会先判断freetype下include目录是否存在ft2build.h文件,满足该条件后才会继续搜索freetype.lib和freetype.dll。
如果你用的是VS中文版编译器那么很不幸,在编译过程中会报Target CPU mismatch,这是由于在执行CL.exe获取编译版本的时候由于输出是中文的原因会导致获取不到,我们只要注释掉相关检查逻辑即可,注释如下:

相关的检查逻辑不止一处,类似上图全部注释即可。
踩到的坑全都解决后运行make all会把包括JVM、JDK包括在内的源码全部编译一遍,整个过程大概耗时80分钟。编译完的结果保存在openjdk\build\windows-x86_64-normal-server-fastdebug中。

将hotspot工程导入到Visual Studio

如果想debug hotspot我们可以按照以下步骤将源码导入到VS中。

  • 首先打开cmd命令窗口进入hotspot\make\windows目录
  • 找到VS安装的目录,进入VC\bin\amd64复制vcvars64.bat批处理的全路径
  • 在cmd中执行vcvars64.bat建立vc工程的导出环境
  • 执行create openjdk\build\fastdebug\images\j2sdk-image指定刚才编译好的jdk路径并创建VS工程
  • 进入到hotspto\build目录下会看到导出的工程,用VS导入即可

    F7编译后就可以debug了。
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值