JAVA虚拟机学习(一):win10编译openjdk8

    技术2025-04-06  16

    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

    Processed: 0.010, SQL: 9