最新2023 win11+wsl2 自己编译自己的JDK

Posted 李君临

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最新2023 win11+wsl2 自己编译自己的JDK相关的知识,希望对你有一定的参考价值。

最新2023 win11+wsl2 自己编译自己的JDK

参考文章,深入理解JAVA虚拟机 周志明的,结合网上多个实践文章终于完成。

1、安装ubuntu系统

参考我的上一篇文
win11安装wsl2的ubuntu
很简单的配置,系统是默认的ubuntu22.04

记得换个源,会很快,不过那个下文的gcc版本降级,需要稍微等一下。

2、下载jdk12源码并放到Linux系统

打包下载源码。

https://hg.openjdk.java.net/jdk/jdk12

下载zip

下载完文件

有两个方案。

  • 第一个直接解压到当前的下载目录中,然后使用cp命令,就是等很久没有进度条,很烦。不推荐

这是我当时的情景。 OTZ!!! cp或者mv 命令,卡住了

cp -r /mnt/e/download/googleDownload/jdk12-06222165c35f /home/jdk12/

/mnt/e 这个对于linux来讲的。/mnt 就能找到原来的真实windwos盘.e是 e盘,意思是windows下载解压放到了e盘的/download/googleDownload/

将jdk12-06222165c35f 这个解压的包,cp到 /home/jdk12/。

  • 第二个就是,直接使用压缩工具,选择好文件夹,直接解压到,linux系统里面

关于如何找到linux的文件系统。 \\wsl ,可以直接找到linux的存储地方。

直接用7zip 解压路径

\\\\wsl$\\Ubuntu\\home\\shine\\Project\\jdk12

\\\\wsl$\\  找到系统按照路径
Ubuntu  是安装的系统名称路径
home 是系统里面,大家应该都知道,后面就是自定义了

有一说一,还是很慢!!!!!!!!!但是起码有进度条,让我知道有用

3、下载openOracleJdk 11

然后要想编译jdk12,你需要搞一个编译jdk12的环境。

使用bash 命令

bootstrap jdk,引导环境。因为jdk12很多是java代码写的。

意思是,你需要下一个jdk11。

据原文说,大版本号为N,需要编译好的jdk必须是N-1的。

sudo apt-get install openjdk-11-jdk

4、配置好linux的编译环境

4.1、关键点,gcc的版本需要降低

ubuntu22.04的gcc是11太高了,后期生成源码配置会报错。需要使用gcc7

gedit 这个直接跳出文本编辑,比vim好用

\\# ubuntu软件源配置文件
gedit /etc/apt/sources.list
# 向文件中添加如下代码,追加一个软件源
deb [arch=amd64] http://archive.ubuntu.com/ubuntu focal main universe
# 更新源文件
apt-get update
# 安装 gcc-7 g++-7
apt-get -y install gcc-7 g++-7

# 多版本管理 最后的数字越大,优先级越高 这里维护了7 9 11三个版本 默认是版本7
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 50
update-alternatives  --install /usr/bin/g++ g++ /usr/bin/g++-7 50
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 10
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 10
update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 30
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-11 30

4.2、安装其他编译需要的配置

等的时候安装以下,第三方库,比如freetype,cups

sudo apt-get install build-essential
sudo apt-get install libfreetype6-dev
sudo  apt-get install libcups2-dev
sudo  apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev
sudo  apt-get install libasound2-dev
sudo  apt-get install libffi-dev
sudo  apt-get install autoconf
sudo apt-get install libfontconfig1-dev

应该没啥问题了,那么开始真正的编译了。

5、进行编译

准备好环境,和依赖项目后,使用默认配置就可以开始编译了。

输出命令

bash configure --enable-debug --with-jvm-variants=server

 
编译,fastDebug版本,仅含Server模式的HotSpot虚拟机
默认是 release版本 
相关命令查询可以用   bash configure  --help

最后成功了 如下所示

====================================================
A new configuration has been successfully created in
/home/shine/project/jdk12/jdk12-06222165c35f/build/linux-x86_64-server-fastdebug
using configure arguments '--enable-debug --with-jvm-variants=server --disable-warnings-as-errors'.

Configuration summary:
* Debug level:    fastdebug
* HS debug level: fastdebug
* JVM variants:   server
* JVM features:   server: 'aot cds cmsgc compiler1 compiler2 epsilongc g1gc graal jfr jni-check jvmci jvmti management nmt parallelgc serialgc services shenandoahgc vm-structs zgc'
* OpenJDK target: OS: linux, CPU architecture: x86, address length: 64
* Version string: 12-internal+0-adhoc.root.jdk12-06222165c35f (12-internal)

Tools summary:
* Boot JDK:       openjdk version "11.0.18" 2023-01-17 OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu122.04) OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)  (at /usr/lib/jvm/java-11-openjdk-amd64)
* Toolchain:      gcc (GNU Compiler Collection)
* C Compiler:     Version 7.5.0 (at /usr/bin/gcc)
* C++ Compiler:   Version 7.5.0 (at /usr/bin/g++)

Build performance summary:
* Cores to use:   15
* Memory limit:   15900 MB

6、生成镜像

然后呢,生成镜像命令就是最后一步了。

make images

make 也会报错,会报错,参考8.2!!!因为源码问题


不知道有没有成功?太难了

7、验证编译结果

7.1、通过查看编译后JDK的版本,来验证编译是否成功

./build/linux-x86_64-server-fastdebug/jdk/bin/java --version

如果输出以下内容,则代表编译成功!

openjdk 12-internal 2019-03-19

OpenJDK Runtime Environment (fastdebug build 12-internal+0-adhoc.gx.jdk)

OpenJDK 64-Bit Server VM (fastdebug build 12-internal+0-adhoc.gx.jdk, mixed mode)

这是本人的 不要直接输入java --version

#不要直接输入  java --version,这是个安装的jdk版本,不是编译的#
root@Shine:/home/shine/project/jdk12/jdk12-06222165c35f/build/linux-x86_64-server-fastdebug/jdk/bin# java --version

openjdk 11.0.18 2023-01-17

OpenJDK Runtime Environment (build 11.0.18+10-post-Ubuntu-0ubuntu122.04)

OpenJDK 64-Bit Server VM (build 11.0.18+10-post-Ubuntu-0ubuntu122.04, mixed mode, sharing)

 

root@Shine:/home/shine/project/jdk12/jdk12-06222165c35f/build/linux-x86_64-server-fastdebug/jdk/bin# ./java

--version

openjdk 12-internal 2019-03-19

OpenJDK Runtime Environment (fastdebug build 12-internal+0-adhoc.root.jdk12-06222165c35f)

OpenJDK 64-Bit Server VM (fastdebug build 12-internal+0-adhoc.root.jdk12-06222165c35f, mixed mode)

8、问题总结

8.1、默认版本过高,make报错**

使用默认的gcc版本,然后bash configure,再make,导致以下问题,反正搞不定。

bash configure

WARNING: C and C++ compiler have different version numbers, gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0 Copyright (C) 2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. vs g++ (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0 Copyright (C) 2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE..

**解决方法,如上问4.1,降低版本

如果因为之前没弄,可以直接删除

rm -r -f 那个build的文件

8.2、jdk12源码问题

然后 make images 又报错

gedit  make/common/MakeBase.gmk

替换

# Does the actual work with parameters stripped.
# If the file exists AND the contents is the same as the variable, do nothing
# else print a new file.
# Always returns the name of the file where the value was printed.
# Param 1 - Name of variable
# Param 2 - (optional) name of file to store value in
DependOnVariableHelper = \\
    $(strip \\
        $(eval -include $(call DependOnVariableFileName, $1, $2)) \\
        $(if $(call equals, $(strip $($1)), $(strip $($1_old))),,\\
          $(call MakeDir, $(dir $(call DependOnVariableFileName, $1, $2))) \\
          $(if $(findstring $(LOG_LEVEL), trace), \\
              $(info NewVariable $1: >$(strip $($1))<) \\
              $(info OldVariable $1: >$(strip $($1_old))<)) \\
          $(call WriteFile, $1_old:=$(call DoubleDollar,$(call EscapeHash,$($1))), \\
              $(call DependOnVariableFileName, $1, $2))) \\
        $(call DependOnVariableFileName, $1, $2) \\
    )
    
    

替换成下面的

# Does the actual work with parameters stripped.
# If the file exists AND the contents is the same as the variable, do nothing
# else print a new file.
# Always returns the name of the file where the value was printed.
# Param 1 - Name of variable
# Param 2 - (optional) name of file to store value in
DependOnVariableHelper = \\
    $(strip \\
        $(eval $1_filename := $(call DependOnVariableFileName, $1, $2)) \\
        $(if $(wildcard $($1_filename)), $(eval include $($1_filename))) \\
        $(if $(call equals, $(strip $($1)), $(strip $($1_old))),,\\
          $(call MakeDir, $(dir $($1_filename))) \\
          $(if $(findstring $(LOG_LEVEL), trace), \\
              $(info NewVariable $1: >$(strip $($1))<) \\
              $(info OldVariable $1: >$(strip $($1_old))<)) \\
          $(call WriteFile, $1_old:=$(call DoubleDollar,$(call EscapeHash,$($1))), \\
              $($1_filename))) \\
        $($1_filename) \\
    )

然后可以正常make images

参考博客

https://blog.csdn.net/qq_25825005/article/details/127162939

Win10 子系统 WSL 编译安装MySQL5.7

---恢复内容开始---

在win10 商店中选择 ubuntu18.04

 

下载地址

http://dev.mysql.com/downloads/mysql/ 

wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-boost-5.7.23.tar.gz

tar -zvxf mysql-boost-5.7.23.tar.gz

cd mysql-5.7.23

 

sudo apt-get install cmake -y

sudo apt-get install gcc g++ -y

apt-get install git -y

apt-get install libncurses5 libncurses5-dev -y

sudo apt-get install -y build-essential

sudo apt-get install flex bison -y

安装boost 1.59 https://sourceforge.net/projects/boost/

wget https://nchc.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz

下载过程有些慢,我用的迅雷下载的,速度非常快

 sudo apt-get install mpi-default-dev libicu-dev python-dev libbz2-dev -y

 cd boost_1_59_0

./bootstrapsh

./b2 -a -sHAVE_ICU=1 # the parameter means that it support icu or unicode

 sudo ./b2 install

 

 

 

 

 

sudo cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysql.sock -DMYSQL_TCP_PORT=3306 -DENABLED_LOCAL_INFILE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DEXTRA_CHARSETS=all -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DENABLE_DOWNLOADS=1

如果出现错误,再次编译的时候需要删除CMakeCache.txt文件

 

groupadd mysql
useradd -g mysql mysql
mkdir /usr/local/mysql/data
chown -R mysql /usr/local/mysql
chgrp -R mysql /usr/local/mysql

 

/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data

记下生成的密码

/usr/local/mysql/bin/mysql_ssl_rsa_setup --user=mysql

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
update-rc.d mysqld defaults
service mysqld start

 

ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql

 

mysql -uroot -p\'(+:rGtOj8><<\'
mysql> ALTER USER \'root\'@\'localhost\' IDENTIFIED BY \'1024\';

以上是关于最新2023 win11+wsl2 自己编译自己的JDK的主要内容,如果未能解决你的问题,请参考以下文章

Win20H1使用Ubuntu and Docker for wsl2

WSL2的配置

Win11的WSL2系统更换磁盘和wsl使用简介

win11安装ubuntu(by wsl2)

win11安装ubuntu(by wsl2)

win11安装ubuntu(by wsl2)