jvm-0x01-在Linux上编译openjdk22

之前在mac上编译的openjdk源码jvm-0x00-编译openjdk,两个原因促使我要在Linux上操作一下

  • mac机子老了,性能不行了,编译一次发烫厉害
  • 一鼓作气,借着这个机会把以前没学的源码重拾

1 安装jdk21作为boot

官网下个java21用作openjdk22的boot

1
2
3
4
5
6
7
mkdir -p MyApp/jdk/21
mv ~/MyDownload/jdk-21_linux-x64_bin.deb ~/MyApp/jdk/21
cd MyApp/jdk/21
sudo apt install ./jdk-21_linux-x64_bin.deb
dpkg -l|grep jdk
java -version
dpkg -L jdk-21

在zsh中修改一下对应环境变量

2 下载源码

1
2
3
4
5
6
git clone git@github.com:Bannirui/jdk.git
cd jdk
git remote add upstream git@github.com:openjdk/jdk.git
git remote set-url --push upstream no_push
git remote -v
git checkout jdk_22_study

3 生成make脚本

先安装依赖

1
2
3
4
5
6
sudo apt install autoconf
sudo apt install zip
sudo apt-get install libasound2-dev
sudo apt-get install libcups2-dev
sudo apt-get install libfontconfig1-dev
sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev

比如在用windows的wsl时,要防止自动推导当前系统以及交叉编译,明确告知就是Linux平台,build和host参数要指定

1
2
3
4
5
6
7
8
9
bash configure \
--build=x86_64-linux-gnu \
--host=x86_64-linux-gnu \
--target=x86_64-linux-gnu \
--with-debug-level=slowdebug \
--with-jvm-variants=server \
--with-freetype=bundled \
--with-boot-jdk=/home/dingrui/MyApp/jdk/jdk-21.0.10 \
--disable-warnings-as-errors

看下build目录下生成的conf名称linux-x86_64-server-slowdebug

4 编译

1
2
3
make CONF=linux-x86_64-server-slowdebug compile-commands

make CONF=linux-x86_64-server-slowdebug

5 运行java

1
./build/linux-x86_64-server-slowdebug/jdk/bin/java --version

jvm-0x01-在Linux上编译openjdk22
https://bannirui.github.io/2025/06/13/java/jvm-0x01-在Linux上编译openjdk22/
作者
dingrui
发布于
2025年6月13日
许可协议