linux CentOS 7.4 64位编译openjdk7和hotspot虚拟机指南

转自:http://www.zuidaima.com/blog/3862384921103360.htm

linux CentOS 7.4 64位编译openjdk7和hotspot虚拟机指南

在学习《深入理解Java虚拟机-JVM高级特性与最佳实践》一本书的时候,发现按照书上作者的步骤编译jdk时,总会出现各种问题,主要原因如下

1.作者采用的Ubuntu 10.10 版本的linux,和大多数读者使用的centos版本linux 命令不一样,例如 apt-get 命令

2.作者省略了一些步骤,尽管这些步骤对了解这方面的人来说不值得一提,但对小白来说还是比较重要的,例如我就经常搞不清作者在哪个目录,执行了什么操作

3.作者给出下载openJDK的链接无法打开(时间久远网站不可用或者被墙了)

4.编译时报的错误不是很明显,经常百度半天没有找到解决方案或解决方案不奏效

经过一天的尝试,终于编译好了自己的jdk(报各错误搞得我很焦灼啊),现记录下来,防止自己忘记,也给大家做一个参考。

一、环境

操作系统:linux CentOS 7.4 64位(刚重装完的,防止少记录编译前的工作,哈哈)

使用jdk:jdk7

计划编译的jdk:OpenJDK7

二、准备工作

1.安装编译用到的工具

yum install -y mercurial
yum install -y ant ant-nodeps
yum install -y libX11* libX*
yum install -y libXi-devel libXtst-devel libXt-devel freetype* 
yum install -y alsa-lib-devel cups-devel
yum install -y gcc gcc-c++
yum install -y glibc-static libstdc++-static

2.准备jdk

检查是否安装了jdk,如果安装了先卸载掉,然后下载oracle jdk7 安装到/opt/java/jdk1.7.0_80(方法很简单,使用的jdk和要编译的jdk版本不要相差太多,否则会有奇怪的错误,jdk部分源码是java编写的,在编译jdk时会用到。注意:解压完成不要设置classpass,javahome 环境变量)

下载openjdk7 解压到/mayiwen/ (这个目录自己随便指定,看个人喜好),因为无法开发作者给出的网站,这里我找到一个不错的网站,可以使用如下代码下载jdk源码

 

mkdir /mayiwen
cd /mayiwen
hg clone http://hg.openjdk.java.net/jdk7u/jdk7u-dev
cd jdk7u-dev
chmod 755 get_source.sh 
./get_source.sh

等待5分钟左右,出现如下图片则下载openjdk完成

linux CentOS 7.4 64位编译openjdk7和hotspot虚拟机指南

三、开始编译

1.设置环境变量,其中LANG 和ALT_BOOTDIR 两个环境变量必须设置,其他可以不必设置

#设置环境语言,不设置会报一个hashtable NPE错误
export LANG=C
#Bootstrap JDK的安装路径,必须设置
export ALT_BOOTDIR=/opt/java/jdk1.7.0_80
#允许自动下载依赖
export ALLOW_DOWNLOADS=true

#并行编译的线数,设置和cpu的数量一致即可
export HOTSPOT_BUILD_JOBS=1
export ALT_PATALLER_COMPILE_JOBS=1

#比较本次build出来的映像与先前版本的差异,这对我们来说没有意义,
export SKIP_COMPARE_IMAGES=true
#使用预编译头文件,不加这个编译会更慢一些
export USE_PRECOMPILED_HEADER=true

#指定要编译的内容
export BUILD_LANGTOOLS=true
export BUILD_HOTSPOT=true
export BUILD_JDK=true
export BUILD_JAXP=true
export BUILD_JAXWS=true
export BUILD_CORBA=true

#要编译的版本
#export SKIP_DEBUG_BUILD=false
#export SKIP_FASTDEBUG_BUILD=true
#export DEBUG_NAME=debug

#可以避开javaws和浏览器Java插件之类的部分build
BUILD_DEPLOY=false

#设置成false就不会build出包装包,因为包装包里有些奇怪的依赖
#但是即使不build出它也已经能得到完整的JDK映像,所以还是别build它好了
BUILD_INSTALL=false

#编译结果存放的路径
export ALT_OUTPUTDIR=/mayiwen/jdk7u

#卸载环境变量,避免诡异的事情发生
unset JAVA_HOME
unset CLASSPATH
unset JAVA_OPTS

#make 2>&1 | tee $ALT_OUTPUTDIR/build.log

可以不用一个一个执行,我是建了一个shell脚本,然后执行,环境变量就设置成功啦,代码如下

cd /mayiwen
vim ready
#将上面一大段代码复制到这里,保存
chmod 755 ready
. ready

2.执行编译检查

cd /mayiwen/jdk7u-dev/
make sanity

出现如下结果代表检查通过

linux CentOS 7.4 64位编译openjdk7和hotspot虚拟机指南

3.编译(我是1核2G的机器,大概需要30多分钟,耐心等待ing...)

make all

linux CentOS 7.4 64位编译openjdk7和hotspot虚拟机指南

四、运行测试

在输出目录/mayiwen/jdk7u/j2sdk-image下就是编译好的jdk啦,可以把它放在JAVA_HOME指定的目录下作为完整的jdk使用。

在输出目录/mayiwen/jdk7u/hotspot/outputdir/linux_amd64_compiler2/下是编译好的hotspot源码,此时还需要在/mayiwen/jdk7u/hotspot/outputdir/linux_amd64_compiler2/jvmg下的env.sh文件中添加如下代码,才可以运行

 

LD_LIBRARY_PATH=.:${JAVA_HOME}/jre/lib/amd64/native_threads:${JAVA_HOME}/jre/lib/amd64:
export LD_LIBRARY_PATH

测试一下,

. ./env.sh
./test_gamma


如果输出了一大堆如下代码 说明搭建成功了,此结果是(八皇后问题的解),也可以输入./gamma -version 查看虚拟机的版本信息

linux CentOS 7.4 64位编译openjdk7和hotspot虚拟机指南

linux CentOS 7.4 64位编译openjdk7和hotspot虚拟机指南

到此,jdk和hotspot已经编译成功。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值