一、说明
本文的所有操作都是在JVM虚拟机学习之(1)使用 Ubuntu 14.04 编译 OpenJDK 9的基础上完成
最近在看《深入理解JVM虚拟机》这本书,文中第一章需要配置虚拟机和编译OpenJDK
,因为书中的版本年代久远,有些资源很难找到,很难复现书中的内容,达到一模一样的效果。网上有很多用Ubuntu16
来编译OpenJDK8
的文章供参考,本身我的常用linux
系统也是Ubuntu16
,但是亲自试过没有成功的,总是这里一点问题,那里一个error
。之后总算看到上面链接的文章,亲测可行,但是文章内容省略过多,需要结合很多其他的步骤才能完成编译,特意来写一篇博客记录一下.Ubuntu14
就当作专门学习java虚拟机的系统了.
- 系统: Ubuntu 14.04
- 编译JDK: OpenJDK 9
- 运行JDK(BootStrap JDK): jdk-8u201-linux-x64.tar.gz
所需资源
- Ubuntu 14.04 运行的操作系统
- OpenJDK 9 用来编译的JDK
- jdk-8u201-linux-x64.tar.gz 用来做运行环境的JDK
- eclipse-cpp-helios-SR2-linux-gtk-x86_64.tar.gz 用来调试的工具
- make-4.1.tar.bz2 用来升级操作系统make命令的版本
链接:https://pan.baidu.com/s/1IodC_cOQqHYe9fV_mkDPig&shfl=sharepset
提取码:pftm
二、操作步骤
因为要编译OpenJDK9,这个版本是在jdk8的基础上编译的,并且要需要gcc和g++(Ubuntu默认安装).所以下面的主要步骤是先安装jdk8的java环境,然后再对jdk9源码进行编译
1.系统安装
Ubuntu14.04在VM上是傻瓜式安装,安装完设置sudo passwd root
设置管理员密码,还可以设置清华源
- 最好给虚拟机打个快照保存一下
2.安装JDK
把jdk-8u201…tar.gz放到任意文件夹下,在该文件夹下操作
2.1创建目录
sudo mkdir /usr/lib/jvm
2.2解压到该目录
sudo tar -zxvf jdk-8u201-linux-x64.tar.gz
2.3修改环境变量
sudo vim ~/.bashrc
2.4文件末尾追加
#set oracle jdk environment
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_201 ## 这里要注意目录要换成自己解压的jdk 目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
2.5退出,使环境变量马上生效
source ~/.bashrc
2.6设置系统默认jdk版本
sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk1.8.0_201/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/lib/jvm/jdk1.8.0_201/bin/javac 300
sudo update-alternatives --install /usr/bin/jar jar /usr/lib/jvm/jdk1.8.0_201/bin/jar 300
sudo update-alternatives --install /usr/bin/javah javah /usr/lib/jvm/jdk1.8.0_201/bin/javah 300
sudo update-alternatives --install /usr/bin/javap javap /usr/lib/jvm/jdk1.8.0_201/bin/javap 300
然后执行:
sudo update-alternatives --config java
若是初次安装jdk,会有下面的提示
There is only one alternative in link group java (providing /usr/bin/java):
/usr/lib/jvm/jdk1.8.0_201/bin/java
否者,选择合适的jdk
2.5 测试jdk
#java -version
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)
3.安装编译所需以来的软件
sudo apt-get install libfreetype6-dev
sudo apt-get install libcups2-dev
sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev
sudo apt-get install libasound2-dev
sudo apt-get install libffi-dev
sudo apt-get install libelf-dev
4. 安装make
官方文档建议使用4.0以上版本编译,原文用的使make4.0,我自己安装的时候报错,没找到某个头文件,以为是gcc
或g++
版本低了,升级到了gcc-4.9和g++4.9.但是结果还是失败,最终只能使用make4.1
网盘中保存了make-4.1.tar.bz2文件,参考文章Ubuntu更新make
1、解压make源码到随便一个目录。
2、进入目录执行./configuration
3、执行./build.sh
4、删除已安装的make:sudo apt-get remove make
5、执行./make install
6、替换make文件:sudo cp make /usr/bin/make
5.编译OpenJDK
# 解压
unzip openjdk-9_src.zip
cd openjdk
# 使用configure 命令进行依赖检测
bash configure --disable-warnings-as-errors --with-debug-level=slowdebug --with-native-debug-symbols=internal
# 使用make编译
make images
经过漫长的等待,终于完成
下面就来测试一下
cd build/linux-x86_64-normal-server-slowdebug/jdk/bin
# 输入 ./java -version
xxx@ubuntu:~/Desktop/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin$ ./java --version
openjdk 9-internal
OpenJDK Runtime Environment (slowdebug build 9-internal+0-adhoc.hong.openjdk)
OpenJDK 64-Bit Server VM (slowdebug build 9-internal+0-adhoc.hong.openjdk, mixed mode)