最近在看深入理解虚拟机,涉及到要编译openjdk8,在下选择是阿里云Linux Ubuntu 16.04.搭建环境。如何下载OpenJDK8的源码以及安装BootstrapJDK1.7就不在这里讲了。这里主要将编译过程及配置。
首先得声明,博主在Linux Ubuntu 16.04下编译open JDK1.8,当配置到最后一步执行./java -version时会报错,错误如下:
这个错误不知道时什么原因,百度谷歌很久都无法解决,这似乎是版本问题,因为当博主使用Linux Ubuntu 14.04来配置编译时,最后一步执行./java -version是成功的。如下图:
所以如果在Linux Ubuntu 16.04环境下实在无法编译成功,建议可以考虑换成Linux Ubuntu 14.04。阿里云服务器可以更换不同系统,方法可以自行百度,博主就是这样将云服务器的Ubuntu 16.04环境换成Ubuntu 14.04的。
下面是在Linux如何配置编译open JDK1.8,Ubuntu 16.04和Linux Ubuntu 14.04在配置部分操作基本相同。又因为编译的是OpenJDK1.8,所以不用向其他编译jdk1.7一样去设置环境变量。
在阿里云下载好了OpenJDK的源码,安装好了Bootstrap JDK 后,开始编译openJDk。在此之前,先下载安装一些依赖包。命令如下:
sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev sudo apt-get install libcups2-dev sudo apt-get install libfreetype6-dev sudo apt-get install libasound2-dev
编译JDK的环境已经准备好,可以开始进行编译。进入解压后的 OpenJDK8.0 根目录,输入以下命令:
bash configure
但结果Linux还是报错
原来没有解压工具uzip,需要自己安装
如果是Ubuntu的的系统可以用下面的命令安装
sudo apt-get install unzip zip
如果是用yum安装的话用下面的命令安装
yum install -y unzip zip;
顺便将网上看到的一段话复制到我的帖子:
一般来说著名的linux系统基本上分两大类:
1 RedHat系列:Redhat、Centos、Fedora等
2 Debian系列:Debian、Ubuntu等
RedHat 系列:
1 常见的安装包格式 rpm 包,安装rpm包的命令是 “rpm -参数”
2 包管理工具 yum
3 支持tar包
Debian系列
1 常见的安装包格式 deb 包,安装deb包的命令是 “dpkg -参数”
2 包管理工具 apt-get
3 支持tar包
所以你Ubuntu不该用yum 该用apt-get
言归正传,回到原来的编译OpenJDK所需依赖配置的问题,安装好unzip后,执行bash configure,依然出现问题:
但是事实上libfreetype6-dev我已经安装了,
但还是报错,百度了好久,发现都找不到怎么解决,后来谷歌了一下,发现很多外国人都遇到了Ubuntu的这个问题并给出了解决方法,还是谷歌好。执行下面这条命令就可以解决问题:
sudo apt-get install pkg-config
博主除了在Ubuntu 16.04上编译OpenJDK8之外,还在Ubuntu 14.04上编译OpenJDK8,Ubuntu 14.04上的操作基本与Ubuntu 16.04相同,但出现了不同的问题,当配置依赖包时,执行apt-get install libcups2-dev命令时,会出现错误:没有安装libgnutls-dev包,
E: Unable to correct problems, you have held broken packages ;这也是个挺麻烦的问题,博主找了很多方法都不行,因为安装一个包之前可能要安装很多其他的依赖包,而其他的依赖包又有版本冲突,最后在一篇帖子上找到了解决方法,将原有包删去,强制装上你要的包,帖子链接如下:
https://www.cnblogs.com/Jerryshome/p/4260942.html。
最后Linux下的依赖配置完成了,出现内容如下图就可以编译:
接下来便是进行编译,运行以下命令
sudo make all
遇到错误如下:
解决方法:添加版本支持
vi hotspot/make/linux/Makefile
进入Makefile文件,找到 SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3%,在后面加上4%,即变成
SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3% 4%
继续编译,再次执行make all,再次报错。。。,这次的错误是:
recipe for target 'ad_stuff' failed
解决方法:
vi hotspot/make/linux/makefiles/adjust-mflags.sh
进入 adjust-mflags.sh文件,
找到
找到s/ -([^ ][^ ]*)j/ -\1 -j/,将这一行删掉。
再次编译,这次成功了,编译过程会耗比较长的时间:
最后一步是验证之后的JDK,执行命令,进入指定目录:
cd openjdk/build/linux-x86_64-normal-server-release/jdk/bin
执行./java -version命令,这是在Ubuntu 14.04下的成功截图: