本文将详细介绍在Ubuntu16.04上对OpenJDK8进行编译。

1、准备编译环境

使用的操作系统为Ubuntu16.04,如果读者没有安装Ubuntu,可以在Windows上使用虚拟机的方式进行安装,或者可以直接在电脑上安装多系统,这种方式比以虚拟机安装的方式速度要快。Ubuntu操作系统使用的是Linux内核,由于HotSpot是由C++编写的,所以在编译时需要Linux的编译器GCC。

2、下载源代码 

OpenJDK使用的代码管理工具为Mercurial(hg),下载并安装Mercurial后就可以通过hg clone命令获取OpenJDK8的源代码了,相关的命令如下:

  1. hg clone http://hg.openjdk.java.net/jdk8/jdk8 openjdk
  2. cd openjdk
  3. bash ./get_source.sh

使用Mercurial下载时速度相对较慢,可以直接去相关网站上下载压缩包,网址为:http://download.java.net/openjdk/jdk8。笔者下载的压缩包为openjdk-8-src-b132-03_mar_2014.zip,使用如下命令对压缩包进行解压: 

  1. unzip openjdk-8-src-b132-03_mar_2014.zip

解压后openjdk目录下重要的目录如下表所示。

 

3、编译源代码

openjdk中的README-builds.html网页提供了编译源代码的相关说明。在Ubuntu操作系统下编译可以分为两步:

第一步,生成编译配置的脚本 

生成编译配置的脚本使用的命令如下: 

  1. bash ./configure \
  2. --with-target-bits=64 \
  3. --with-boot-jdk=/usr/java/jdk1.7.0_80/ \
  4. --with-debug-level=slowdebug \
  5. --enable-debug-symbols ZIP_DEBUGINFO_FILES=0

运行这个命令对编译的openjdk所需要的依赖进行检查,如果终止,可根据对应的提示安装相关的依赖。命令行选项--with-target-bits指定编译64位系统的JDK; 命令行选项--with-boot-jdk指定引导JDK所在目录,以防其他安装的JDK影响。构建JDK8需要使用JDK7 Update 7或更高版本的版本作为引导JDK,但不应使用JDK8作为引导JDK;命令行选项--with-debug-level=slowdebug,有这个选项,可以在GDB等代码调试过程中提供足够的信息;--enable-debug-symbols ZIP_DEBUGINFO_FILES=0生成调试的符号信息,并且不压缩。

如果命令运行成功,会在当前目录下生成一个目录,目录的名称是根据要编译的目标确定的,如笔者Ubuntu 64位操作系统下生成的目录名为linux-x86_64-normal-server-slowdebug。

第二步,编译 

编译使用的命令如下:

  1. make all ZIP_DEBUGINFO_FILES=0

如果命令运行成功,则成功编译出了JDK。运行如下命令:  

  1. ./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version
输出的信息如下: 
  1. openjdk version "1.8.0-internal-debug"
  2. OpenJDK Runtime Environment (build 1.8.0-internal-debug-mazhi_2019_08_12_20_52-b00)
  3. OpenJDK 64-Bit Server VM (build 25.0-b70-debug, mixed mode)

在openjdk下创建一个Test.java源文件,内容如下: 

  1. public class Test{
  2.      public static void main(String[] args){
  3.         System.out.println("Hello World!");
  4.      }
  5. }

通过Javac编译器编译如上的源代码,得到Test.class文件。

运行如上的Class文件,命令如下:

  1. ./build/linux-x86_64-normal-server-slowdebug/jdk/bin/javac Test.java
  2. ./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java Test

输出如下的信息:   

  1. Hello


关注个人博客www.classloading.com或公众号,有HotSpot源码剖析系列文章!

在Ubuntu 16.04上编译OpenJDK8的源代码-LMLPHP

09-25 05:28