在Ubuntu16.04下编译OPENJDK8

Java 发表评论


在Ubuntu16.04下编译OPENJDK8

最近在看一本书《Java虚拟机精讲》,该书第一章简单介绍了java基础知识后,便开始讲解自己编译JDK,书中使用的是OPENJDK7来进行讲解的。于是我选择了最新的OPENJDK8来学习编译。

编译准备

  • 下载OPENJDK8
  • 编译系统选择
    • 首先java是跨平台的,理论上应该在各大系统平台下应该都能编译
    • 不过,win下向来比较麻烦,易错,不建议使用
    • 笔者有linux环境,选用系统Ubuntu16.04
  • 构建工具
    • 首先,如果你英文水平可以,读到这里可以结束了,可以直接参考源码文件中的文件README-build.html,该说明很清晰地描述了编译中的系统环境设置、工具使用等等。但是描述很简单,需要有一定的自信,相信自己可以搞定。
    • 如果,你属于另外一类,可以继续阅读本文。
    • 下面开始building,分为System Setup,Configure,Make三个小节进行描述

编译过程

  • System Setup(我的环境是Ubuntu16.04)

    • 对于所有的系统,都需要以下几个要求

      • GNU make的版本3.81以上.
        • 可以使用命令make -version查看机器的make版本。一般Ubuntu已经默认安装了较新版本的GNU MAKE,笔者的版本是GNU Make 4.1,显然满足最低要求。如果你的版本低了,可以自行更新GNU Make。
      • 安装一个Bootstrap JDK,构建jdk8,需要jdk7 update或者更新。jdk8不能使用jdk8作为boot jdk。
        • Bootstrap JDK,也叫Boot JDK,字面意思就是引导JDK,也即你编译某一个版本的JDK需要依赖一个低版本的JDK。通常是编译JDK8就需要JDK7来做boot jdk,(笔者猜想)可能新版本的某些更新就是基于老版本的方法,你编译新版本的jdk时,必须保证调用的方法全都存在。(/笔者猜想)
        • 如何安装?ubuntu 软件源已经将openjdk7移除,所以需要自己添加源,并update、install,具体请参考博客http://blog.csdn.net/chenzhao2013/article/details/53671160
        • 安装完boot,需要设置少量的环境变量
          • export LANG=C
          • export PATH=”/usr/lib/jvm/java-1.7.0-openjdk/bin:${PATH}”
          • 上面路径是你的boot jdk的安装路径,你需要自行查看路径,一般是安装在、usr/jvm下,需要寄几确认路径是否正确。
      • 确认GNU Make、GNU Gcc和Boot JDK在环境变量中。

        • 简单确认方法,分别命令行输入以下命令,如果正确输出版本,即可认为环境变量设置成功
          • make -v
          • gcc -v
          • java -version
      • 注意,如果你以前已经在系统中设置了java_home,记得unset(注释掉)。一般Ubuntu系统预先给你设置了环境变量。均需要UNSET。

    • 在linux系统下,还需要其他的工具,alsa,freetype,cups,and xrender.这些工具可以暂时不安装,在执行make指令时,如果缺少库,会提醒你进行安装,笔者就是这样。。。
  • Configure
    • 一般执行命令类似这样BASH: ./cond=figure [OPTIONS]
    • 执行命令的目的是检测环境设置是否正确,是否能够进行下去
    • 也会指定一个编译的输出文件路径
    • 笔者的configure文件一开始不能执行,提示权限不够。需要加上可执行权限,命令:chmod +x configure
    • OPTIONS参数,可以设置很多,我这里一个都不说,需要的自己去查一下README-build.html,不加这个参数也可以,因为有点不太需要,全部默认即可。笔者就是直接执行命令./configure
  • Make
    • make就是用来编译的
    • 执行指令: make
    • 如果因为错误,停止,try: make -i(忽略错误)
    • make 后也可以跟参数,如:all,all-conf等。
  • 博客一开始提到的那本书说,如果默认参数编译jdk,可能需要一个小时,笔者什么参数都没有设置,直接make,后显示只用了5分28秒。后来发现是编译有问题。。。
  • 结果输出如下:
    [编译结果]
  • 我的问题
    • 编译结束后,我查看了log,发现里面存在error,???我也不明白。
    • 但是在编译好的jdk下bin目录下,执行./java -version,能够输出编译的java版本。

问题交流

在使用中有任何问题,欢迎反馈给我,可以用以下联系方式跟我交流

致谢

  • 本文是在阅读《Java虚拟机精讲》时,写的博客,感谢高老师。

发表评论

邮箱地址不会被公开。 必填项已用*标注

昵称 *