首页 > 代码库 > 自己动手在Linux下编译JDK

自己动手在Linux下编译JDK

因为决定学习Java虚拟机,所以打算从自己编译JDK开始入手。本文是学习Java虚拟机的第一篇文章,后续会有更多相关文章。

获取源码

本文选择的源码版本为1.7。可以使用如下命令来获取源码:
1)安装Mercurial的最新版本
Mercurial是与Git相似的一个分布式版本控制系统,但使用方法上与Subversion相似。如果你使用过Subversion,很容易迁移到Mercurial。安装命令如下:

$ sudo apt-get install python
$ sudo apt-get install python-all-dev
$ sudo apt-get install python-setuptools
$ sudo easy_install -U mercurial

检测是否成功安装:

$ hg --version
Mercurial Distributed SCM (version 3.1.2)
(see http://mercurial.selenic.com for more information)

Copyright (C) 2005-2014 Matt Mackall and others
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

2)下载源码

$ cd ~
$ hg clone http://hg.openjdk.java.net/jdk7u/jdk7u60 openjdk-7-src
$ cd openjdk-7-src
$ sh ./get_source.sh

这样就可以源码会下载到openjdk-7-src目录下。

注意千万不要这样获取源码:

$ mkdir ~/jdk
$ cd ~/jdk/
$ wget http://www.java.net/download/openjdk/jdk7/promoted/b147/openjdk-7-fcs-src-b147-27_jun_2011.zip
$ unzip openjdk-7-fcs-src-b147-27_jun_2011.zip

这个地址获取的源码不是最新的,会有以下bug:

make[5]: Entering directory `/home/ruifengshan/jdk/openjdk/build/linux-amd64-debug/hotspot/outputdir‘
make -f /home/ruifengshan/jdk/openjdk/hotspot/make/linux/Makefile checks
make[6]: Entering directory `/home/ruifengshan/jdk/openjdk/build/linux-amd64-debug/hotspot/outputdir‘
>&2 echo "*** This OS is not supported:" `uname -a`; exit 1;
*** This OS is not supported: Linux ruifengshan-ubuntu 3.13.0-37-generic #64-Ubuntu SMP Mon Sep 22 21:28:38 UTC 2014 x86_64 x86_64 x86_64 GNU/Linux
make[6]: *** [check_os_version] Error 1
......

系统

本文采用的Linux系统,发行版为Ubuntu 14.04 64位。

构建编译环境

1)安装编译需要的gcc等软件,可以使用如下命令一次性安装

$ sudo apt-get libasound-dev libcups2-dev build-essential
$ sudo apt-get install libxt-dev
$ sudo apt-get install libxtst-dev

2)安装ant

$ mkdir /export/ant
$ cd /export/ant
$ wget http://www.gtlib.gatech.edu/pub/apache//ant/binaries/apache-ant-1.9.4-bin.tar.gz
$ sudo tar -zxf apache-ant-1.9.4-bin.tar.gz
$ sudo vim /etc/profile

输入如下内容:

export ANT_HOME=/export/ant/apache-ant-1.9.4
export PATH=$PATH:$ANT_HOME/bin

完成后使用如下命令使设置生效:

$ source /etc/profile

3)安装Java环境
编译还需要用到JDK的运行时包,这是为了编译JDK中用Java代码编写的那部分所需要的。关于如何安装Java这里就不再赘述了。本文安装Java的目录为:/export/java6/jdk1.6.0_45。

4)环境变量设置
在命令行输入如下内容:

export ALT_BOOTDIR=/export/java6/jdk1.6.0_45  
export LANG=C 
export ALLOW_DOWNLOADS=true  
unset CLASSPATH
unset JAVA_HOME

5)安装freeType
执行如下命令安装freeType

$ mkdir ~/freetype
$ cd ~/freetype
$ wget http://ftp.yzu.edu.tw/nongnu//freetype/freetype-2.5.3.tar.gz
$ tar -zxf freetype-2.5.3.tar.gz
$ cd freetype-2.5.3
$ ./configure
$ make
$ sudo make install

安装成功后,还需要输入如下命令:

$ sudo ln -s /usr/local/include/freetype2/freetype /usr/local/include/freetype

否则,会出现如下错误:

ERROR: FreeType version  2.3.0  or higher is required. 
...

6)执行make sanity检查
在OpenJDK目录下运行make sanity检查。如果在最后输出以下内容,则证明设置都正确。

$ cd ~/openjdk-7-src
$ make sanity
......
Sanity check passed.

开始编译

执行如下命令:

$ cd ~/openjdk-7-src
$ make ALLOW_DOWNLOADS=true

如果出现以下内容,则表名编译成功:

########################################################################
##### Leaving jdk for target(s) sanity all docs images             #####
########################################################################
##### Build time 00:07:50 jdk for target(s) sanity all docs images #####
########################################################################

#-- Build times ----------
Target all_product_build
Start 2014-10-29 13:35:25
End   2014-10-29 13:43:48
00:00:16 corba
00:00:07 hotspot
00:00:02 jaxp
00:00:05 jaxws
00:07:50 jdk
00:00:03 langtools
00:08:23 TOTAL
-------------------------
make[1]: Leaving directory `/home/ruifengshan/jdk/openjdk-7-src‘

测试

使用如下命令测试以下编译的结果:

$ cd ~/jdk/openjdk-7-src
$ build/linux-amd64/bin/java -version
openjdk version "1.7.0-internal"
OpenJDK Runtime Environment (build 1.7.0-internal-ruifengshan_2014_10_29_12_50-b00)
OpenJDK 64-Bit Server VM (build 24.60-b09, mixed mode)

注意其中的(build 1.7.0-internal-ruifengshan_2014_10_29_12_50-b00),里面会包含你自己的名字。

转载请注明出处:http://blog.csdn.net/iAm333

自己动手在Linux下编译JDK