zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    模板方法模式
    组合模式
    JS API文档
    支持 @connect写法
    PHP word导入题库
    go 复制文件和创建目录
    go文件写入
    go 文件读取
    gin连接mysql数据库
    gin多数据格式返回结果
  • 原文地址:https://www.cnblogs.com/xiaoyao-lxy/p/7792044.html
Copyright © 2011-2022 走看看