欢迎光临散文网 会员登陆 & 注册

2023 编译Windows JDK8(亲测有效)

2023-07-23 14:46 作者:xiao_bang  | 我要投稿



  1. 安装JDK8,Cygwin,VS2010,freetype

  2. 下载jdk源码

  3. 配置

  4. 编译

一.安装Boostrap JDK

先有母鸡,才有蛋

要想编译jdk8,首先得有jdk8。很明显,这是一只母鸡,我们需要它来下蛋。

建议使用镜像下载站安装jdk8

https://mirrors.huaweicloud.com/java/jdk/此处使用华为云的jdk镜像

选择jdk8啥版本都可以,下载后安装,配置环境变量

二.安装Cygwin

https://www.cygwin.com

下载安装,一路下一步,安装路径不要含有空格和中文


选择清华镜像(https://mirrors.tuna.tsinghua.edu.cn),下一步

选择完整,搜索并安装如下包

binutils,cpio,mercurial,zip,unzip,make,m4,procps-ng

安装完下一步

三.安装Visual Studio 2010英文版,(PowerISO)

由于VS2010过于久远,所以目前VS2010直接安装包并不可用(微软下载服务器域名更换)

所以使用iso镜像的方法来安装。

首先下载VS2010的ISO镜像,什么版本的都可以

https://my.visualstudio.com/Downloads?q=visual studio 2010

使用微软官方下载(需要登录微软账号)


此处选择Visual Studio Professional 2010(2.189GB),点击下载

得到一个iso镜像,并用PowerISO挂载到一个盘,双击盘符

自动打开安装界面(如果没有,请手动点击盘里面的setup.exe)

图中为Visual Studio Uitimate 2010(来源与互联网)

点击安装
取消勾选
同意协议


勾选Custom

安装目录不要含有空格和中文

最后仅勾选C++就可以了

四.获取freetype

https://github.com/ubawurinna/freetype-windows-binaries/releases

此处是已编译好的freetype

选择最新releases下载,解压后将文件夹下对应电脑架构的文件夹名称改为lib

例如:freetype/release dll/win64改为lib,建议把lib文件夹复制出release dll文件夹放在freetype目录下。

五.获取JDK源码

打开Cygwin,在终端 输入

hg clone http://hg.openjdk.java.net/jdk8u/jdk8u/

下载最新OpenJDK jdk8u源码到jdk8u目录

cd jdk8u/

进入jdk目录

ls

检查一下文件是否完整

sh ./get_source.sh

获取完整源码

这一步不能省略,过程可中断,下一次执行自动下一步

执行完这里可能会出现这个情况,这个应该不是网络的问题,我试了很多次都这样,这导致jdk根目录下jdk文件夹的丢失。如果你直接忽略该步骤,将在编译过程中出现该错误


理智方法:借助wsl在linux执行get_source.sh后复制jdk8u文件夹到Windows(√)

什么是理智

(打开浏览器https://hg.openjdk.org/jdk8u/jdk8u/jdk/archive/tip.zip下载(建议魔法)

并解压到jdk根目录就可以解决了)

六. 配置文件

chmod +x ./configure

赋予文件执行权限

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

参数:

--with-freetype=freetype位置,替换成你自己的

--with-target-bits=目标架构(64,86)

--enable-debug 开启调试模式


配置成功

七.编译器前的准备


接下来是一个不断试错和改错的过程。

在jdk根目录,终端输入make all(全量编译),然后直接报错。

以下是各种报错的解决方法(按顺序来的)

1. 中文乱码,可以用记事本或notepad--等打开jdk8u/build/windows-x86_64-normal-server-fastdebug/build.log查看

2. ‘xxxx’ 不是内部或外部命令,也不是可运行的程序

若终端输出如上内容,则说明是vc环境变量有问题,说实话,这就是个坑

由于Microsoft SDKs这个文件夹中间有个空格的原因,导致无法正常获取sdks

解决方法,就是更改该文件夹的名称。

编辑jdk8u/build/windows-x86_64-normal-server-fastdebug/vs-env/set-vs-env.sh

如上

检查一下有没有路径中含有空格的(除了Program Files之类)

结果一眼就看到了Microsoft SDKs,把整个文件中的Microsoft SDKs替换成MicrosoftSDKs(随便)

并实际去修改这个文件夹的名称(这可能会导致部分程序无法正常使用,你可以复制Microsoft SDKs后再改名)

另外还需要应用一下这个配置,所以

编辑jdk8u\common\autoconf\generated-configure.sh

查找”Trying to extract Visual Studio environment variables

在下面几行找到”cmd /c extract-vs-env.bat | $CAT”一行.在前面加上#注释掉


最后执行第六个步骤

看到这个就说明配置成功

其他也是类似的情况,把路径中有空格的文件夹名空格去掉就好了

3.error C2220: warning treated as error - no object file generated

详见:https://learn.microsoft.com/zh-cn/cpp/error-messages/compiler-errors-1/compiler-error-c2220

由于编译cpp过程中,使用/WX的选项,编译器将所有的警告视为了错误(坑啊),关掉,关掉,必须关掉。

编辑jdk8u\hotspot\make\windows\makefiles\compile.make

查找/WX,找到

这一行,并去掉 /WX.如果要忽略所有警告,把/W3改为/W0

八.全量编译

make all


用时13分钟,编译成功

jdk8u\build\windows-x86_64-normal-server-fastdebug\images


jre和jdk


j2re-image这个就是jre,j2sdk-image就是jdk,可以直接使用


java版本信息部分可以在jdk8u\hotspot\make\hotspot_version更改

九. 增量编译

jdk8u\jdk\src\share目录下,就是各个Java包的源码,可以随意查看和更改。

更改完在终端输入make images进行增量编译(两分钟左右)

十.小芝士

PROGRA~1:Program Files

PROGRA~2:Program Files (x86)

MICROS~1:    Microsoft

It's possible to build both Windows and Linux binaries from WSL. To build Windows binaries, you must use a Windows boot JDK (located in a Windows-accessible directory).

Note that while it's possible to build on WSL, testing is still not fully supported.

                                                                                                ----------Building the JDK Doc



2023 编译Windows JDK8(亲测有效)的评论 (共 条)

分享到微博请遵守国家法律