win10下编译openjdk8
1.编译环境
-
openjdk8下载
下载地址:https://download.java.net/openjdk/jdk8u40/ri/openjdk-8u40-src-b25-10_feb_2015.zip
下载解压完成后在openjdk根目录下有编译手册README-builds.html,其中有说明Windows下如何编译。 -
安装Cygwin
2.1.下载Cygwin
直接去Cygwin官网下载:www.cygwin.com
低版本可能会有问题,我直接下载的是最新版本3.1.5
2.2.安装Cygwin
Cygwin安装需要选择额外的工具,官方手册说明需要以下额外工具
(1)运行安装文件,无脑下一步
(2)在这一步选择下一步后可能会出现加载不到数据源
(3)添加网易数据源http://mirrors.163.com,国内有很多数据源
(4)接下来根据前面的清单一个一个搜索并选择版本
(5)全部选择完后继续无脑下一步,直到安装完成
3.安装Visual Studio 2010 Professional
下载地址:https://docs.microsoft.com/zh-cn/visualstudio/releasenotes/vs2010-version-history
安装时选择C++模块安装即可
- 下载FreeType
下载地址:https://sourceforge.net/projects/freetype/files/latest/download?source=files
下载完成后解压
(1)打开Visual Studio 2010,文件->打开->项目解决方案
(2) 选择freeTyp目录下 builds\windows\vc2010\freetype.sln
(3)选择项目右键属性
(4)点击配置管理器,将配置设置成Release static 平台选择x64
(5)返回freeType属性页,设置目标扩展名为.lib,平台集成工具为v100,配置类型选择静态库(.lib)
(6)右键项目,点击生成
(7)再右键项目,属性进入属性页,将目标文件扩展名设置为.dll,配置类型设置为动态库(.dll)
(8)再右键项目,生成
(9)进入freeType根目录创建lib文件夹,进入objs\x64\Release Static目录下,将freetype.dll,freetype.lib拷贝进新创建的lib下
2.编译JDK
-
生成编译配置脚本
打开Cygwin,进入OpenJdk根目录,在Cgywin中可以用/cygdrive/ + 目录形式,例如:/cygdrive/d/openjdk
(1)输入命令:./configure --with-freetype=/cygdrive/*/freetype-2.10.2/ --with-target-bits=64 --enable-debug
–with-freetype=/cygdrive后跟freeType目录
(2)运行成功后
-
开始编译
(1)输入命令:make all
编译时间比较长,需要一两个小时,中间如果出错,需要修改配置执行make clean 再执行make all进行重新编译(反反复复编译了好几次,花费了大半天~~~~)
(2)编译成功界面:
(3)验证
cmd进入openjdk目录下的build\windows-x86_64-normal-server-fastdebug\jdk\bin
执行javac -version和java -version
3.安装编译过程中的问题
- 生成lib时失败
解决方法:
右键项目属性,将平台集成工具设置为v100
2. 生成脚本出现错误Your cygwin is too old. You are running 3.1.5(0.340/5/3), but at least cygwin 1.7 is required. Please upgrade
解决方法:
打开 openjdk\common\autoconf\generated-configure.sh, 搜索but at least cygwin 1.7,将7250-7254整个if判断都注释掉
- 生成脚本出现错误The path of SRC_ROOT, which resolves as “*/openjdk-8u40-src-b25-10_feb_2015/openjdk”, is invalid
解决方法:
openjdk目录下不能有中文 - 生成脚本出现错误:error: Target CPU mismatch. We are building for x86_64 but CL is for “”; expected “x64”.
解决方法:
打开 openjdk\common\autoconf\generated-configure.sh, 搜索Target CPU mismatch,将20214-20222与21815-21823整个if判断都注释掉
- 生成脚本出现错误:error: Can not find or use freetype at location given by --with-freetype
解决方法:
核对./configure --with-freetype=/cygdrive/*/freetype-2.10.2/ --with-target-bits=64 --enable-debu中的freeType路径是否正确 - 编译时出现错误:第 65 行:[: ▒▒▒▒ x64 ▒▒ Microsoft ® C/C++ ▒Ż▒▒▒▒▒▒▒ 16: 需要整数表达式/usr/bin/expr: 语法错误
解决方法:
(1)打开\hotspot\make\windows\get_msc_ver.sh,注释掉65-70的if语句,在之后添加MSC_VER_RAW=16.00.30319.01
MSC_VER=1600
(2)这里需要知道cl的版本号,通过cmd执行VS2010目录下\VC\bin\cl.exe,执行时可能会出现以下错误
(3)配置环境变量:在path中添加C:*\Common7\IDE, vs2010安装目录下的Common7\IDE的路径(网上查找也有说执行下Common7\Tools\vsvars32.bat,但我执行后还是会出现这个错误)
(4)再重新执行,可以看到版本为16.00.30319.01,对应MSC_VER_RAW
- 编译时出现错误:make[1]: *** [BuildJdk.gmk:70:libs-only] 错误 2
解决方法:
(1)用notepad++打开openjdk目录下\jdk\make\CreateJars.gmk
(2)notepad++中点击视图->显示符号->显示所有字符
(3)找到268行和280行.class$$处
(4)在.class后Crtl+M(注意这两个地方一定都要改)
(5)保存后执行再在Cygwin中执行make clean清理,再执行make all
参考文章和资料
1.https://blog.csdn.net/qq0012520/article/details/86014579
2.https://blog.csdn.net/sptoor/article/details/8892315?utm_source=blogxgwz3
3.Openjdk8源码中的README-builds.html