红联Linux门户
Linux帮助

在Ubuntu16.04下编译OPENJDK8的方法

发布时间:2016-12-16 11:12:20来源:blog.csdn.net/chenzhao2013作者:cz陈钊
最近在看一本书《Java虚拟机精讲》,该书第一章简单介绍了java基础知识后,便开始讲解自己编译JDK,书中使用的是OPENJDK7来进行讲解的。于是我选择了最新的OPENJDK8来学习编译。
 
编译准备
1.下载OPENJDK8
老实说,我没有在openjdk网站上找到openjdk8的源码下载地址。只找到6和7的
最后在一篇文章上找到的,http://download.java.net/openjdk/jdk8/(感谢。)
 
2.编译系统选择
首先java是跨平台的,理论上应该在各大系统平台下应该都能编译
不过,win下向来比较麻烦,易错,不建议使用
笔者有linux环境,选用系统Ubuntu16.04
 
3.构建工具
首先,如果你英文水平可以,读到这里可以结束了,可以直接参考源码文件中的文件README-build.html,该说明很清晰地描述了编译中的系统环境设置、工具使用等等。但是描述很简单,需要有一定的自信,相信自己可以搞定。
如果,你属于另外一类,可以继续阅读本文。
下面开始building,分为System Setup,Configure,Make三个小节进行描述
 
编译过程
1.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时,必须保证调用的方法全都存在。(/笔者猜想)
如何安装?Ubuntu16.04软件源已经将openjdk7移除,所以需要自己添加源,并update、install:
sudo add-apt-repository ppa:openjdk-r/ppa  
sudo apt-get update   
sudo apt-get install openjdk-7-jdk
安装完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指令时,如果缺少库,会提醒你进行安装,笔者就是这样。
 
2.Configure
一般执行命令类似这样BASH: ./cond=figure [OPTIONS]
执行命令的目的是检测环境设置是否正确,是否能够进行下去
也会指定一个编译的输出文件路径
笔者的configure文件一开始不能执行,提示权限不够。需要加上可执行权限,命令:chmod +x configure
OPTIONS参数,可以设置很多,我这里一个都不说,需要的自己去查一下README-build.html,不加这个参数也可以,因为有点不太需要,全部默认即可。笔者就是直接执行命令./configure
 
3.Make
make就是用来编译的
执行指令: make
如果因为错误,停止,try: make -i(忽略错误)
make 后也可以跟参数,如:all,all-conf等。
 
4.一开始提到的那本书说,如果默认参数编译jdk,可能需要一个小时,笔者什么参数都没有设置,直接make,后显示只用了5分28秒。后来发现是编译有问题。
 
5.结果输出如下:
在Ubuntu16.04下编译OPENJDK8的方法
 
6.我的问题
编译结束后,我查看了log,发现里面存在error,我也不明白。
稍微看了一眼,看到日志显示,can’t find symbol…难道是java源码有bug?
 
本文永久更新地址:http://www.linuxdiyf.com/linux/26956.html