Ubuntu14.04LTS编译JDK1.8

一、前言

  最近学习周志明老师的《深入理解Java虚拟机》一书,想要自己编译一个jvm,中间经历了许多波折,故将过程记录下来,希望能帮助到同样想要学习的同学们。

  首先要说明的一点是,按照老师书上编译JDK1.7的步骤,我试了很多次,总是因为各种版本问题而出错,所以改编译JDK1.8。需要注意,编译1.8时会自动识别Bootstrap JDK,也就是说,不需要显示的指定其安装路径,当前也不能取消设置JAVA_HOME和CLASSPATH这两个环境变量,否则会报错。还有就是,编译时的系统不支持Ubuntu16.04

  

*** This OS is not supported: Linux xiaoyao-ubuntu 4.8.0-36-generic #36~16.04.1-Ubuntu SMP Sun Feb 5 09:39:41 UTC 2017 i686 i686 i686 GNU/Linux
/usr/local/jdkbuild/openjdk/hotspot/make/linux/Makefile:238: recipe for target 'check_os_version' failed

二、准备工作

1. 编译环境

  • 操作系统:Ubuntu14.04LTS - 32 bit
  • Bootstrap JDK版本:java version "1.8.0_151"
  • Ant版本:Apache Ant(TM) version 1.10.1 compiled on February 2 2017
  • gcc版本:gcc (Ubuntu 4.8.4-2ubuntu1~14.04.3) 4.8.4

2. 下载openjdk源码

  网址:http://jdk.java.net

  

  选择Java SE 8,往下拉

  点击 zip file,下载源码

三、编译

  这里要提醒一下学习《深入理解Java虚拟机》的同学,编译JDK1.8的步骤和编译1.7的步骤已经大不相同。老师书上说的设置各种环境变量这一步骤在编译1.8的时候可以略去,使用源码包里自带的脚本即可完成

1. 检查环境

  解压刚才下载的源码包,进入解压后的目录,我放的路径是/usr/local/openjdk

 1 $ cd /usr/local/openjdk/
 2 $ ll
 3 total 436
 4 drwxr-xr-x 14 root root   4096 11月  6 09:35 ./
 5 drwxr-xr-x 14 root root   4096 11月  6 09:19 ../
 6 -rwxr-xr-x  1 root root   7399 11月  6 09:35 a.out*
 7 -rw-r--r--  1 root root   1503 11月  6 09:19 ASSEMBLY_EXCEPTION
 8 drwxr-xr-x  3 root root   4096 11月  6 09:35 build/
 9 drwxr-xr-x  6 root root   4096 11月  6 09:19 common/
10 -rw-r--r--  1 root root   1235 11月  6 09:19 configure
11 drwxr-xr-x  5 root root   4096 11月  6 09:19 corba/
12 -rw-r--r--  1 root root   3095 11月  6 09:19 get_source.sh
13 -rw-r--r--  1 root root     70 11月  6 09:19 .hgignore
14 -rw-r--r--  1 root root  19280 11月  6 09:19 .hgtags
15 drwxr-xr-x  7 root root   4096 11月  6 09:19 hotspot/
16 drwxr-xr-x  6 root root   4096 11月  6 09:19 jaxp/
17 drwxr-xr-x  6 root root   4096 11月  6 09:19 jaxws/
18 drwxr-xr-x  2 root root   4096 11月  6 09:19 .jcheck/
19 drwxr-xr-x  6 root root   4096 11月  6 09:19 jdk/
20 drwxr-xr-x  6 root root   4096 11月  6 09:19 langtools/
21 -rw-r--r--  1 root root  19263 11月  6 09:19 LICENSE
22 drwxr-xr-x  6 root root   4096 11月  6 09:19 make/
23 -rw-r--r--  1 root root   6232 11月  6 09:19 Makefile
24 drwxr-xr-x 12 root root   4096 11月  6 09:19 nashorn/
25 -rw-r--r--  1 root root   1549 11月  6 09:19 README
26 -rw-r--r--  1 root root 129333 11月  6 09:19 README-builds.html
27 drwxr-xr-x  2 root root   4096 11月  6 09:19 test/
28 -rw-r--r--  1 root root 178392 11月  6 09:19 THIRD_PARTY_README

  在编译之前大家可以看一下 README 中的内容,里边有说编译步骤

  以下步骤推荐大家获取root权限后操作,不仅可以少打很多sudo,还能避免一些奇怪的问题

  

1 # bash ./configure

  执行此命令后,会自动检测编译环境是否满足条件,再次提醒:不能 unset JAVA_HOME,否则回报找不到jdk的错误

  在命令执行过程中,可能会因为依赖的原因报错而终止,这时不要慌,看一下错误提示,缺什么依赖就安装一下,最后成功的话有如下提示:

 1 ====================================================
 2 A new configuration has been successfully created in
 3 /usr/local/jdkbuild/openjdk/build/linux-x86-normal-server-release
 4 using default settings.
 5 
 6 Configuration summary:
 7 * Debug level:    release
 8 * JDK variant:    normal
 9 * JVM variants:   server
10 * OpenJDK target: OS: linux, CPU architecture: x86, address length: 32
11 
12 Tools summary:
13 * Boot JDK:       java version "1.8.0_151" Java(TM) SE Runtime Environment (build 1.8.0_151-b12) Java HotSpot(TM) Server VM (build 25.151-b12, mixed mode)  (at /usr/local/java/jdk1.8.0_151)
14 * C Compiler:     gcc-5 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 version 20160609 (at /usr/bin/gcc-5)
15 * C++ Compiler:   g++-5 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 version 20160609 (at /usr/bin/g++-5)

2. 编译

  在编译之前,需要修改源码的一个地方

1 vim /usr/local/openjdk/hotspot/make/linux/makefiles/gcc.make

  在这个文件中,找到“-Werror”这个字符串, 将他所在的行注释掉,否则会报错:cc1plus: warnings being treated as errors

  使用命令make,注意加个参数,否则会报错:cc1plus: error: the "stabs" debug format cannot be used with pre-compiled headers [-Werror=deprecated]

1 make all DEBUG_BINARIES=true

  然后就是漫长的等待......

  最终结果

 1 ----- Build times -------
 2 Start 2017-11-06 09:57:30
 3 End   2017-11-06 10:45:55
 4 00:01:02 corba
 5 00:01:04 demos
 6 00:04:59 docs
 7 00:30:06 hotspot
 8 00:01:42 images
 9 00:00:28 jaxp
10 00:00:48 jaxws
11 00:07:56 jdk
12 00:00:01 langtools
13 00:00:17 nashorn
14 00:48:25 TOTAL
15 -------------------------
16 Finished building OpenJDK for target 'all'

3. 测试

  进入目录/usr/local/openjdk/build/linux-x86-normal-server-release/jdk/bin

  执行./java -version

1 openjdk version "1.8.0-internal"
2 OpenJDK Runtime Environment (build 1.8.0-internal-root_2017_11_06_09_35-b00)
3 OpenJDK Server VM (build 25.40-b25, mixed mode)

  编译成功

四、可能需要的依赖

 1 sudo apt-get -y install build-essential 
 2 
 3 sudo apt-get -y install libx11-dev     #注意X是小写, 错误提示里说的是大写
 4 sudo apt-get -y install libxext-dev 
 5 sudo apt-get -y install libxrender-dev 
 6 sudo apt-get -y install libxtst-dev 
 7 sudo apt-get -y install libxt-dev
 8 
 9 sudo apt-get -y install libcups2-dev
10 sudo apt-get -y install libfreetype6-dev
11 sudo apt-get -y install libasound2-dev
12 
13 sudo apt-get -y install ccache
原文地址:https://www.cnblogs.com/xiaoyao-lxy/p/7792044.html