JVM学习——1. win10 下构建64位 openJDK8 完整篇

     之前面试的时候总是能碰到关于JVM的问题,这次下定决心研究一下。开篇的时候说是要编译一个openjdk,真不容易,折腾了大约有2-3天,其中走了一些弯路,参考的文章链接见底部,建议不用看他们的了,因为就是参考的太多,反而犯了一些错误,耽误了很长时间,钻进了思维死角里。废话少说,上干货。     

     编译环境说明

  1. win10
  2. cygwin 64位最新版本,别太旧就行
  3. freetype 2.7
  4. vs2010
  5. openjdk8
  6. JDK 7 (本地机器安装)

    以上安装软件全部提供下载啦(都是官网下载的)。链接:https://pan.baidu.com/s/10iD2e7LhtQTPolGVUdOGgg 密码:yjqh

软件安装

首先安装cygwin:这个是模拟Linux环境的软件,相当于一个虚拟机,主要编译工作在这里进行。

以下几类package是必须要安装的。

Binary Name Category Package Description
ar.exe Devel binutils The GNU assembler, linker and binary utilities
make.exe Devel make The GNU version of the ‘make’ utility built for CYGWIN
m4.exe Interpreters m4 GNU implementation of the traditional Unix macro processor
cpio.exe Utils cpio A program to manage archives of files
gawk.exe Utils awk Pattern-directed scanning and processing language
file.exe Utils file Determines file type using ‘magic’ numbers
zip.exe Archive zip Package and compress (archive) files
unzip.exe Archive unzip Extract compressed files in a ZIP archive
free.exe System procps Display amount of free and used memory in the system

如图,默认都是default,选择需要必须要安装的点击那个如刷新的按钮,切换成install。我选择的ALL  Install,装了多长时间我不知道,我是点完下一步就下班走人了,哈哈。




将cygwin的安装路径下bin目录配置到环境变量path中,如我的安装路径为:E:\DevTools\Cygwin\cygwin_install\bin


安装VS2010,这个安装过程我就省略了,但是要注意的是,安装路径不要有空格,因为以后你会用到它......

将下载的freetype2.7解压。如解压至E:\freetype-2.7

接下来介绍通过vs2010编译64位的freetype-2.7,至于freetype是干嘛的,请童鞋们自行百度搜索。

编译Freetype

为照顾没有使用过vs的同学,介绍一下编译的具体过程,第一次打开vs2010的话,选择使用VC++,选择file-->open-->project/solution...,找到你解压freetype的路径 ,如我的E:\freetype-2.7\builds\windows\vc2010\freetype.sln



打开后,右键项目,选择properties,如图


由于我们想编译64位的openjdk,所以我这里需要64位的,在编译之前的检查中,我们不仅需要dll文件还需要lib文件,都是用同一个工程编译出的只是后缀不太一样。编译两次的时候只需要修改vs2010的配置后缀就OK了,注意在vs2010的配置选中,选择X64的,编译的时候,请右键项目,build,请同学们注意下图:

编译freetype.lib:




编译freetype.dll


两个文件编译完成后,编译的文件在目录:E:\freetype-2.7\objs\vc2010\x64



然后咱们在E:\freetype-2.7目录下创建lib文件夹,并将编译好的freetype.dll和freetype.lib复制到该目录。

在编译openjdk之前会校验并用到freetype下的include文件夹下的ft2build.h和lib文件夹下的freetype.dll和freetype.lib文件。(后面会说到编译前的校验,会提到使用这几个文件的地方)



然后还需要设置一下freetype的环境变量,FREETYPE_CFLAGS=E:\freetype-2.7\include;FREETYPE_LIBS=E:\freetype-2.7\lib,可以尝试直接设置在path中。如图:



编译openjdk

打开cygwin,切换到解压的openjdk_8的文件夹根目录,如:


执行命令

bash ./configure -with-freetype=/cygdrive/e/freetype-2.7 -enable-debug -with-target-bits=64

-with-freetype参数是使用指定的freetype,-enable-debug是编译可调试的openjdk,-with-target-bits=64,是指编译64位的

然后就默默祈祷一切顺利吧,此时先开始了一些列的编译检查,你可以用文本编辑器看一下openjdk下面的configure的内容,它实际上指向了这个文件,E:\DevTools\openjdk\common\autoconf\generated-configure.sh,你可以发现这个文件中的各种编译前的校验


如果你看到下面这张图,congratulations,校验通过,可以真正的编译openjdk了


在校验阶段往往存在的坑有好几个,我这里只列举我碰到的,其他请参考别人的文章,

首先补充一下在win系统下需要freetype文件的校验问题,如果不设置freetype的路径,默认它会去C:\Program Files\GnuWin32路径下去找,如下图:



在编译过程中可能会报Target CPU mismatch,那是因为你用的中文版的VS2010编译的freetype的问题,我的使用的英文版的vs2010,没有出现这个问题,如果有请找到如下图的位置,进行屏蔽(可能有好几处,请自行搜索检查),



在编译过程中报如下的错误,请按图在generated-configure.sh文件中找到对应的信息进行屏蔽即可。

configure: Your cygwin is too old. You are running 2.10.0(0.325/5/3), but at least cygwin 1.7 is required. Please upgrade.
configure: error: Cannot continue
configure exiting with result code 1


在编译的过程中遇到的错误,你都可以根据错误信息在generated-configure.sh文件中进行搜索,看一看是哪个位置出现的错误,然后再思考解决的办法。

因为我参考了一篇专门编译freetype的文章,按照文章修改了一个.h的头文件,然后编出来的freetype.dll和freetype.lib在校验的时候总是报不是64位的,其实是文件应该有错误,所以不能进行编译,后来换了英文版的vs2010,打开工程什么文件都没有修改,直接设置了一下编译的配置,然后build出来文件就没有问题,在这个问题上纠结了一段时间,都是泪~~~。


接下来应该都编译通过,你可以通过make all命令进行下一步的工作,编译完的结果在E:\DevTools\openjdk\build\windows-x86_64-normal-server-fastdebug中。


参考文章:

https://blog.csdn.net/tangyongzhe/article/details/53576097

https://blog.csdn.net/yapingxin/article/details/51841039

https://blog.csdn.net/LPWSTR/article/details/78849587

感谢!       

猜你喜欢

转载自blog.csdn.net/wqlinloveruby/article/details/80409031
今日推荐