前言
我的另一篇文章:Ubuntu下编译openjdk8 已经编译了openjdk8的版本,现在需要用到openjdk11的HotspotJVM,所以就编译一下openjdk11,把不同的部分记录下来,openjdk11的准备部分就不在赘述了,直接进入编译环节,需要准备环境的看我的编译openjdk8的文章,先把需要安装的工具安装了。
1.笔者环境
源码:openjdk11,大家可以官网下载,也可以到我的github下载,下载地址
系统:Ubuntu19.04
引导jdk:oraclejdk10,下载地址,下载后解压,然后配置环境变量,可以不配置,但有的环境会出问题。
2.编译过程
编译openjdk8的时候是在Ubuntu18.04,openjdk11开始也在Ubuntu18.04,但是出错半天没有解决了,所以又在Ubuntu19.04全新的环境中编译。
openjdk11,12的编译需要用到jre/lib,所以在引导jdk的目录下创建jre目录,然后把lib文件夹拷到jre目录。
2.1配置编译环境:
bash ./configure --with-target-bits=64 --with-boot-jdk=/opt/jdk/jdk-11.0.4/ --with-debug-level=slowdebug --with-native-debug-symbols=external --disable-warnings-as-errors
执行后出错:
就是说我的系统环境没有安装autoconf,sudo apt-get install autoconf 安装后就可以继续了,不过又出了个错:
error:Could not find fontconfig,就是说找不到fontconfig,安装就是了,按照打印的错误提示安装:sudo apt-get install libfontconfig1-dev,安装完再重新配置,就可以成功了。
2.2开始编译:
make all
编译出错了:
这个错是GCC版本过高导致的,应该是一个jdk的bug,感兴趣的可以看下openjdk的bug提交记录:https://bugs.openjdk.java.net/browse/JDK-8214444
gcc --version查看一下gcc的版本:
确实有点高,官方写的要求GCC版本在4.x到7.x,所以8.3的GCC版本有点高,需要降低一下GCC的版本:
我是把gcc和g++降到gcc/g++6的版本,就可以编译通过了
- 下载gcc/g++ 6
sudo apt-get install -y gcc-6
sudo apt-get install -y g++-6
- 链接gcc/g++实现降级
cd /usr/bin
sudo rm gcc
sudo ln -s gcc-6 gcc
sudo rm g++
sudo ln -s g++-6 g++
再编译就OK了,可以通过,不过有几个警告,没有太大影响,我编译openjdk12没有任何警告,很流畅,11就是有编译的不太流畅。
每个人的环境不一样,出的问题可能也不一样,有问题也欢迎大家留言,如果自己Google找不到的话。