Ubuntu18编译jdk8源码

环境
系统 ubuntu18
Linux ubuntu 5.4.0-150-generic #167~18.04.1-Ubuntu SMP Wed May 24 00:51:42 UTC 2023 x86_64 x86_64 x86_64 GNU/Linux

jdk源码openjdk-8u41-src-b04-14_jan_2020.zip

bootJdk jdk-8u391-linux-x64.tar.gz

ps -e|grep ssh

sudo apt-get install ssh

/etc/ssh/sshd_config将PermitRootLogin改为yes

service sshd restart

然后使用mobaXterm就可以登录了

ubuntu 18 安装低版本gcc
ubuntu18 默认gcc7
安装低版本gcc4.9报错:
正在读取软件包列表… 完成
正在分析软件包的依赖关系树
正在读取状态信息… 完成
现在没有可用的软件包 gcc,但是它被其它的软件包引用了。
这可能意味着这个缺失的软件包可能已被废弃,
或者只能在其他发布源中找到
E: 软件包gcc还没有可供安装的候选者

解决思路:需要更换软件源
打开
sudo gedit /etc/apt/sources.list

新增加
deb http://dk.archive.ubuntu.com/ubuntu/ xenial main
deb http://dk.archive.ubuntu.com/ubuntu/ xenial universe

更新
sudo apt-get update

再安装gcc-4.9,g+±4.9
sudo apt-get install gcc-4.9 g+±4.9

$ gcc -v

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/5/lto-wrapper
Target: x86_64-linux-gnu
Configured with: …/src/configure -v --with-pkgversion=‘Ubuntu 5.4.0-6ubuntu1~16.04.12’ --with-bugurl=file:///usr/share/doc/gcc-5/README.Bugs --enable-languages=c,ada,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-5 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-vtable-verify --enable-libmpx --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-5-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-5-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-5-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12)

gcc4.9 安装切换过程
sudo apt-get install build_essential
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-4.9
sudo apt-get install g+±4.9

sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.9 60 --slave /usr/bin/g++ g++ /usr/bin/g+±4.9
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 70 --slave /usr/bin/g++ g++ /usr/bin/g+±4.8

sudo update-alternatives --config gcc
————————————————
There are 2 choices for the alternative gcc (providing /usr/bin/gcc).

Selection Path Priority Status

* 0 /usr/bin/gcc-4.9 60 auto mode
1 /usr/bin/gcc-4.9 60 manual mode
2 /usr/bin/gcc-5 10 manual mode

————————————————

$ gcc -v

Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.9/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 4.9.3-13ubuntu2' --with-bugurl=file:///usr/share/doc/gcc-4.9/README.Bugs --enable-languages=c,c++,java,go,d,fortran,objc,obj-c++ --prefix=/usr --program-suffix=-4.9 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --with-gxx-include-dir=/usr/include/c++/4.9 --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --enable-gnu-unique-object --disable-vtable-verify --enable-plugin --with-system-zlib --disable-browser-plugin --enable-java-awt=gtk --enable-gtk-cairo --with-java-home=/usr/lib/jvm/java-1.5.0-gcj-4.9-amd64/jre --enable-java-home --with-jvm-root-dir=/usr/lib/jvm/java-1.5.0-gcj-4.9-amd64 --with-jvm-jar-dir=/usr/lib/jvm-exports/java-1.5.0-gcj-4.9-amd64 --with-arch-directory=amd64 --with-ecj-jar=/usr/share/java/eclipse-ecj.jar --enable-objc-gc --enable-multiarch --disable-werror --with-arch-32=i686 --with-abi=m64 --with-multilib-list=m32,m64,mx32 --enable-multilib --with-tune=generic --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.9.3 (Ubuntu 4.9.3-13ubuntu2)

————————————————

boot jdk
/opt/bootJdk/jdk1.8.0_391

解压源码,cd /opt/openjdk
./config
在这里插入图片描述
apt-get install make
在这里插入图片描述

vi .bashrc
在这里插入图片描述

source .bashrc
在这里插入图片描述

configure: error: Could not find all X11 headers (shape.h Xrender.h XTest.h Intrinsic.h). You might be able to fix this by running ‘sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev’.

apt-get install libx11-dev
apt-get install libxext-dev
apt-get install libxrender-dev
apt-get install libxtst-dev
apt-get install libxt-dev

在这里插入图片描述
apt-get install libcups2-dev

在这里插入图片描述

apt-get install libfreetype6-dev

在这里插入图片描述

apt-get install libasound2-dev

在这里插入图片描述

终于阶段执行成功

执行第二部 make all
在这里插入图片描述
vi hotspot/make/linux/Makefile
232行加上 4% 5%

在这里插入图片描述
在这里插入图片描述

安裝了gcc 4.8

在这里插入图片描述
再编译报错如下:
在这里插入图片描述
os_linux.inline.hpp:127:18: error: ‘int readdir_r(DIR*, dirent*, dirent**)’ is deprecated [-Werror=deprecated-declarations]

查阅网上资料说是这是因为glibc >= 2.24的情况下,方法 readdir_r被 deprecated,不支持了,通过getconf GNU_LIBC_VERSION检查发现Ubuntu 18.04.1 LTS版本为glibc 2.27,而且也有很多人在OpenJDK上报了BUG,
链接https://bugs.openjdk.java.net/browse/JDK-8179887,6/7/8/9都不打算修复此问题,会在11修复这个BUG,所以当前只能通过其他的方式来解决,解决方案如下:
在./hotspot/make/linux/makefiles/gcc.make文件中找到WARNINGS_ARE_ERRORS = -Werro,注释该段或改成WARNINGS_ARE_ERRORS = -Wno-all。再编译就会忽略掉警告,直到编译完成。

在这里插入图片描述
Error: time is more than 10 years from present:
简单粗暴,grep “time is more than 10 years from present”,找到报错的代码,直接把10年改成20年,20年不够就100年

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
hotspot/make/linux/makefiles/adjust-mflags.sh

在这里插入图片描述
网上有帖子说是因为内存不足导致报错,把虚拟机内存提高一倍,试试

在这里插入图片描述
最后一次make all 成功编译

在这里插入图片描述
在这里插入图片描述

尝试编译windows 系统对应jdk时,很长时间都没有成功…主要是想在window环境中使用idea可以debug自己编译出来的jdk,突然想到ubuntu是不是也可以安装idea…