Java虚拟机学习笔记(1)Windows下编译OpenJDK8

1、编译环境准备


1.1、获取JDK源码

OpenJDK的官网为 http://openjdk.java.net/。下载JDK8的地址http://download.java.net/openjdk/jdk8,其提供了俩种源码下载方式:Mercurial(一种代码版本管理工具)和Bundles(以源码包的形式下载)。我们采用Bundles进行获取。

1.2、编译环境准备

解压下载的源码包,进入文件夹,打开README-builds.html,这是官方给的编译指导手册。阅读Building->System Setup->Windows,本文根据文档所说的进行操作。

  • 1.2.1.安装CYGWIN

    • CYGWIN是一个开源的、类似linux的环境,它试图模拟Windows上的一个完整的POSIX层。它试图对路径名进行聪明的处理,并且通常可以处理所有的路径,如果这些路径被正确引用或被转义,尽管在内部它会映射驱动器的字母:到一个虚拟的目录/cygdrive/驱动器。
    • 构建OpenJDK 必须要 CYGWIN 1.7.16 或更高的版本. CYGWIN官网:www.cygwin.com.
    • 在默认情况下,CYGWIN不安装构建OpenJDK所需的所有工具。除了默认安装,您还需要安装以下工具Java虚拟机学习笔记(1)Windows下编译OpenJDK8
    • CYGWIN软件可能与Windows系统上的其他非CYGWIN软件发生冲突。CYGWIN官方提供了已知问题的FAQ,地址:https://cygwin.com/faq.html
    • 具体步骤:
      • 下载CYGWIN安装程序:32位下载地址64位下载地址
      • 运行下载下来的安装程序,此处选择从网上进行下载。
        Java虚拟机学习笔记(1)Windows下编译OpenJDK8
      • 此处需要从 镜像库 中下载相关工具包,可以参考https://cygwin.com/mirrors.html选择合适的镜像地址,本处使用:http://mirrors.opencas.org,测试速度最快有600K/S
        Java虚拟机学习笔记(1)Windows下编译OpenJDK8
      • 选择上图中构建OpenJDK所需要的工具包,建议只下载需要的!总共下载近16G… Java虚拟机学习笔记(1)Windows下编译OpenJDK8
      • 点击安装开始安装
  • 1.2.2、Visual Studio 2010 Compilers

    • 32位和64位的OpenJDK Windows构建需要Microsoft Visual Studio C++ 2010 (VS2010) Professional EditionExpress 编译器。编译器和其他工具预计将驻留在由Microsoft Visual Studio安装程序设置的变量VS100COMNTOOLS定义的位置。
    • 仅仅需要 VS2010 的C++部分。 如果安装了其他版本的VS,可以试下添加环境变量VS100COMNTOOLS,例如:
      Java虚拟机学习笔记(1)Windows下编译OpenJDK8,或者修改 generated-configure.sh文件的相关信息,不过这两个本人都没有进行测试过,不过根据遇到的问题来看,想来应该也是可以的。如果还是遇到3.4节的问题,那还是安装VS2010吧
  • 1.2.3、Bootstrap JDK
    就是我们平常用来开发的JDK,编译 openjdk8 必须要 jdk7以上的版本,


2、编译OpenJDK


  • 2.1、通过cygwin进入openjdk解压路径
    Java虚拟机学习笔记(1)Windows下编译OpenJDK8
  • 2.2、配置参数,并校验,如:bash ./configure –enable-debug –with-target-bits=64,具体参数信息参考:README-builds.html#configure 部分。
  • 2.3、执行成功之后,会在openjdk 的build目录下生成 windows-x86_64-normal-server-fastdebug 文件夹
    Java虚拟机学习笔记(1)Windows下编译OpenJDK8

  • 2.4、 执行make all进行编译


3、编译过程中遇到的错误


  • 3.1、 Your cygwin is too old. You are running 2.8.0, but at least cygwin 1.7 is required. Please upgrade.
    解决办法参考:http://www.cnblogs.com/lighten/p/5906359.html

  • 3.2、Testing potential make at /cygdrive/d/GnuWin32/make/bin/make, found using make in PATH
    at /cygdrive/d/GnuWin32/make/bin/make, but it is not for cygwin (it says: This ). Ignoring.t for i386-pc-mingw32

    安装cygwin时选中make 进行安装
    Java虚拟机学习笔记(1)Windows下编译OpenJDK8

  • 3.3、Could not find cpio\Could not find unzip! \Could not find zip!

    因为本人安装cygwin的时候选择的all,可能这些被ignore了,重新打开cygwin安装,View选择full,search框输入cpio、zip、unzip,在skip处点击下变成版本信息,点击下一步进行安装。
    Java虚拟机学习笔记(1)Windows下编译OpenJDK8

  • 3.4、Cannot locate a valid Visual Studio or Windows SDK installation on disk

  • 3.5、error: Target CPU mismatch. We are building for x86_64 but CL is for “”; expected “x64”.
    解决办法参考:http://www.cnblogs.com/lighten/p/5906359.html

  • 3.6、 Could not find freetype! You need to build a 64-bit version of freetype.
    FreeType是一个免费的渲染字体的软件库。下载地址:https://sourceforge.net/projects/freetype/files/latest/download?source=files,执行命令时指定freetype参数,例:bash ./configure –enable-debug –with-target-bits=64 —-with-freetype=/cygdrive/d/freetype-2.8

  • 3.7、Could not find /cygdrive/d/freetype-2.8/lib/freetype.dll. Ignoring location.
    这个就是freetype没有编译的问题了。使用VS2010编译一下。具体步骤如下:
    1)用VS2010打开freetype-2.8/builds/windows/vc2010下的freetype.sln
    2)选中项目右击,选择属性,出现配置框,点击配置管理器,界面如下图。
    Java虚拟机学习笔记(1)Windows下编译OpenJDK8
    3)确定后,项目右键生成解决方案,在freetype目录中/objs/vc2010/x64找到刚刚自己生成的freetype.dll文件。在freetype目录中创建lib目录,将freetype.dll复制过来

  • 3.8、 Could not find /cygdrive/d/freetype-2.8/lib/freetype.lib. Ignoring location.
    和上面的解决步骤一致,只是配置类型改为静态库即可

  • 3.9、 Could not compile and link with freetype. This might be a 32/64-bit mismatch.
    configure: Using FREETYPE_CFLAGS=-I/cygdrive/d/freetype-2.8/include and FREETYPE_LIBS=/cygdrive/d/freetype-2.8/lib/freetype.lib
    configure: error: Can not continue without freetype. To install freetype, run:
    wget “http://gnuwin32.sourceforge.net/downlinks/freetype.php” -O /tmp/freetype-setup.exe
    chmod +x /tmp/freetype-setup.exe
    /tmp/freetype-setup.exe
    Follow GUI prompts, and install to default directory “C:\Program Files (x86)\GnuWin32”.
    After installation, locate lib/libfreetype.dll.a and make a copy with the name freetype.dll.
    将上面两步中freetype.dll、freetype.lib生成并放到lib目录下,就会出现上述error。
    可查看 http://blog.****.net/yapingxin/article/details/51841039 这篇博文修改ftconfig.h,并重新生成,将重新生成的freetype.dll、freetype.lib生成并放到lib目录下就OK了

  • 3.10、D:\openjdk\hotspot/make/windows/get_msc_ver.sh: 第 65 行:[: ▒▒▒▒ x64 ▒▒ Microsoft (R) C/C++ ▒Ż▒▒▒▒▒▒▒ 16: 需要整数表达式
    解决办法参考:http://www.cnblogs.com/lighten/p/5906359.html
    这个步骤运行 cl.exe 若提示计算机丢失 mspdb100.dll,先运行VS安装目录下 VC/vcvarsall.bat,再运行c1.exe

  • 3.11、最后编译时出的错
    Java虚拟机学习笔记(1)Windows下编译OpenJDK8
    不知道是什么原因,假如有知道的希望能告知下,先谢谢了。