自己动手在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

时间: 2024-07-31 21:53:08

自己动手在Linux下编译JDK的相关文章

在linux下编译openjdk7

最近刚开始看<深入理解JAVA虚拟机>这本书.第一章的实践是自己手动编译openjdk7,但书上的步骤都是基于windows的,于是在网上搜了一下linux下编译openjdk的资料: http://blog.csdn.net/kindazrael/article/details/7266314 http://guoh.org/lifelog/2011/05/compile-openjdk-by-yourself/ 这辆篇文章都说的比较详细.其实,最好的文档是openjdk源码包中的READM

使用安装包在linux下安装jdk安装步骤

使用安装包在linux下安装jdk安装步骤:1.下载 tar.gz安装包2.解压安装包3.配置环境4.修改默认设置5.测试是否成功 1.下载: 可以使用wget (tar.gz安装包)url,或者直接下载下来,直接拷贝就可以了.2.解压: tar 打包压缩 -c 归档文件 -x 压缩文件 -z gzip压缩文件 -v 显示压缩或解压缩过程 v(view) -f 使用档名 tar -cvf /home/abc.tar /home/abc 只打包,不压缩tar -zcvf /home/abc.tar

linux下编译php追加enable的方法

如果我们运行php时发现缺少某个库,在windows环境下很简单,找到.dll 对应的库文件,然后拷贝到 extension 目录下,然后在php.ini 里 去掉 前面的分号或者 追加一行 extension = XXXX.dll 即可. linux环境下,可不是像windows环境下那么的简单. 下面我们已 sysvmsg 这个库文件的安装为例 来详细说明php的编译方法 收件进入php的原始文件 比如我是下载在这个路径下: [[email protected] php-5.2.17]# c

linux 下安装 jdk tomcat 并配置

linux下安装TOMCAT与JDK 第1步:新建boss用户,用户名:boss,密码:boss 第2步:将安装用户路径设置成/app/boss [[email protected]]# useradd-d /app/boss -m boss [[email protected]]# passwdboss Changing password for user boss. New password:  boss passwd: all authentication tokens updated s

linux下编译qt5.6.0静态库——configure配置

 随笔 - 116  文章 - 4  评论 - 7 linux下编译qt5.6.0静态库--configure配置 linux下编译qt5.6.0静态库 linux下编译qt5.6.0静态库 configure生成makefile 安装选项 Configure选项 第三方库: 附加选项: QNX/Blackberry选项: Android 选项: 生成makefile 遇到链接检查失败的情况 生成makefile后进行编译 编译时的错误 多重定义'QT_MODBUS()'和'QT_MODBU

linux下编译安装php各种报错大集合

PHP开源脚本语言 PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适用于Web开发领域.PHP的文件后缀名为php. 本文为大家整理汇总了一些linux下编译安装php各种报错大集合 ,感兴趣的同学参考下. 报错1:make 后报错如下: Generating phar.php /home/oldboy/tools/php-5.3.27

Linux下编译ffmpeg

Linux下编译ffmpeg太简单了. 1.下载yasm 1-1. 下载地址:http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz 1-2. 解压缩: tar zxvf yasm-1.3.0.tar.gz 1-3. cd yasm-1.3.0进入 1-4. 命令行执行./configure 检测环境并生成Makefile文件 1-5. 执行make编译,sudo make install安装 2. 下载ffmpeg 2-1

Linux下编译安装qemu和libvirt

目录 [hide] 1 安装qemu 1.1 qemu介绍 1.2 下载源文件 1.3 编译安装 2 安装libvirt 2.1 libvirt介绍 2.2 下载libvirt 2.3 编译安装 3 参考资料 KVM虚拟机(英语:Kernel-based Virtual Machine),是一种用于Linux内核中的虚拟化基础设施.KVM目前支援Intel VT及AMD-V的原生虚拟技术.KVM在2007年2月被导入Linux 2.6.20核心中.它也被引入FreeBSD.在Mac OS X中,

[转载]linux下编译php中configure参数具体含义

编译N次了   原来这么回事 原文地址:linux下编译php中configure参数具体含义作者:捷心特 php编译参数的含义 ./configure –prefix=/usr/local/php                      php 安装目录 –with-apxs2=/usr/local/apache/bin/apxs –with-config-file-path=/usr/local/php/etc      指定php.ini位置 –with-mysql=/usr/local