windows7构建openjdk编译环境

  1. 下载openjdk源码
    采用直接包下载,地址http://www.java.net/download/openjdk/jdk8/promoted/b132/openjdk-8-src-b132-03_mar_2014.zip
  2. 下载cygwin
    cygwin用来在windows下模拟linux环境
    下载地址:https://cygwin.com/setup-x86_64.exe
    安装cygwin需要安装一些包,安装说明可以从openjdk的编译文档说明中查看。
    openjdk编译说明档地址http://openjdk.java.net/groups/build/
    下载其中的说明文档:
    这里写图片描述
    文档中有说明cygwin需要的安装包
    这里写图片描述
    再加上一个diffutils包
  3. 安装vs2010(还是老实的按openjdk说明中的版本吧,安装了一个vs2017编译时报错)
    这里给一个vs2010的网盘下载地址,省的你去找。http://pan.baidu.com/s/1geTwT5h
  4. 虽然openjdk编译文档中对64位没有要求用freetype,但和32位的openjdk一样还是需要的
    下载地址一个https://downloads.sourceforge.net/project/freetype/freetype2/2.8/ft28.zip?r=https%3A%2F%2Fsourceforge.net%2Fprojects%2Ffreetype%2Ffiles%2Ffreetype2%2F2.8%2F&ts=1503276010&use_mirror=nchc
    freetype需要编译一下,因为freetype没有64位的对应版本,freetype在我机器上的目录为D:\workspace\freetype-2.8
    1)用VS2010打开D:\workspace\freetype-2.8\builds\windows\vc2010下的freetype.sln
    2)选中项目右击,选择属性,出现配置框,点击配置管理器,界面如下图。
    这里写图片描述
    这里写图片描述
    3)右击项目,选择生成即可。在freetype目录中/objs/vc2010/x64找到刚刚自己生成的freetype.dll文件。在freetype根目录中创建一个lib文件夹,将这个文件放入其中。要32位的就是修改一下相应的配置就行了。除了dll,还要生成一个lib格式。

  5. 打开cygwin,进入目录 /cygdrive/d/workspace/openjdk,执行如下命令进行配置

bash ./configure --with-freetype=/cygdrive/d/workspace/freetype-2.8 --enable-debug --with-target-bits=64
  1. 配置成功之后,执行:make all进行编译。如果失败了执行make clean,清除编译信息,但是不会清除之前的配置。
  2. 编译结束后,你就会在OpenJDK的根路径下看见一个build文件夹,这个就是编译的输出路径了。build/*/images/j2sdk-image/bin路径必须包含配置了的OpenJDK工具的可执行文件。测试工具jtreg是有必要的。可以在http://openjdk.java.net/jtreg/网址中找到,提供了回归测试,在仓库(repositories)中运行命令:cd test && make PRODICT_HOME=pwd/../build/ 这个还没有实验过,一般只要在编译输出目录中看见有java javac等命令就可以了。

编译过程的错误
1. Your cygwin is too old. You are running 2.8.0(0.304/5/3), but at least cygwin 1.7 is required. Please upgrade.看到这个提示,一阵无语。1.7.16是OpenJDK给的最低版本需求,而我又在搜索这个版本的时候在一个网站看见1.7.17版本,刚想下载时,发现其说明Windows10不支持,2016年1月之后的版本才开始支持Windows10的。回到官网,看见一条注意消息:2.5.2是最后一个支持Windows XP系统和Windows Server 2003的版本,想这个版本连Windows XP都支持,又离目前最新的2.6.0比较接近,应该能使用吧。官网上没有找到旧版本的地址,在我不断寻找旧版本的时候在官网上https://cygwin.com/faq.html#faq.what.version看见了4.23一段话,问题是有些应用是基于旧的版本的DLL安装的,如果使用新的版本安装会中断。官方的解释是,这要取决于中断的含义了。如果应用的安装需要的DLL在另一个位置而不是/bin目录,看问题4.21。如果应用安装是由于在/bin中旧版本的DLL,你就要大声询问应用提供者了。记住,Cygwin DLL严格兼容旧版本,新版本总会运行成功,所以一般而言你要保证你的版本是最新的。
查看具体启动步骤会发现,执行bash ./configure发现是运行了一个名为generated-configure.sh的脚本,其在OpenJDK中的common/autoconf目录下。用Notepad++打开脚本,搜索Your cygwin is too old。发现在7211行开始检查CYGWIN的版本信息,并将其注销掉
这里写图片描述

  1. E:\plugins\openjdk\hotspot/make/windows/get_msc_ver.sh: 第 69 行:[: ▒▒▒▒ 80x86 ▒▒ Microsoft (R) 32 λ C/C++ ▒Ż▒▒▒▒▒▒▒ 16: 需要整数表达式。

    这里不清楚是什么原因造成的,编码乱码还是程序自身识别逻辑出错?但是看程序源码其本意是想测试cl.exe的版本,设定相应的值。cl.exe在vs2010安装目录下VC\bin\下有三个,在dos中运行一下看是哪个版本的。我的是16.00.30319.01版。然后修改openjdk\hostpot\make\windows\get_msc_ver.sh,65-73行注释掉,直接添加MSC_VER=1600,上面有个说明。。cl version 12.00.8804 MSC_VER=1200。很不幸的是我没看见16.00,最多到了15.00,就按这个规律改成了1600。
    这里写图片描述

参考文档http://www.cnblogs.com/lighten/p/5906359.html

猜你喜欢

转载自blog.csdn.net/tszxlzc/article/details/77440110