转载From: MR.HE ,博客链接为 https://blog.csdn.net/hxm_Code/article/details/77417709
本来想自己编译openJDK10的,结果编译的时候遇到了一些问题,可能是机子的GCC版本问题吧(我猜要升级到5+),后来参考这篇文章完成了openJDK8的编译。
最近在学习jvm,平时有关java虚拟机的知识都是从别人的认识,或者书本中获得,然而“纸上得来终觉浅,绝知此事要躬行”。想更深刻的认识jvm,还得自己亲自去研究一番。于是利用工作之余的时间自己编译一套jdk。
编译前注意问题
1、编译openjdk时,需要提供一个启动jdk,即boot JDK;
2、boot JDK需为当前编译的openjdk的上一个版本。例如这里编译的openjdk8,就要用jdk7作为启动jdk;
3、openjdk8跟之前的版本编译方式不一样,之前的版本是基于Ant 、ALT_*环境变量的编译方式,而openjdk8开始则是”configure && make”模式。(详细说明可以阅览官方文档)
我用的JDK的小版本比下面,并且好像JDK1.7要不维护了
环境、工具的准备
OS:CentOS 7 64bit;
OpenJDK:openjdk-8u40;
Boot JDK:jdk-1.7.0.14;
启动jdk的安装在这里就不赘述了,另外还要安装一些类库:
yum groupinstall "Development Tools"
yum install libXtst-devel libXt-devel libXrender-devel
yum install cups-devel
yum install freetype-devel
yum install alsa-lib-devel
- 1
- 2
- 3
- 4
- 5
可能以上类库还不够,但在以后的configure操作会有提示你缺哪些类库或者哪些工具,然后根据提示一 一安装好。
构建并编译
//打开要编译的openjdk目录
cd /usr/openjdk/openjdk-8u40-src-b25-10_feb_2015/openjdk
//生成配置信息并构建编译环境
bash ./configure --with-target-bits=64 --with-boot-jdk=/usr/java/MYBOOTJDK_1.7/ --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FILES=0
//开始编译
make all ZIP_DEBUGINFO_FILES=0
- 1
- 2
- 3
- 4
- 5
- 6
以上的参数简单作一些说明:
–with-target-bits=64 :指定生成64位jdk;
–with-boot-jdk=/usr/java/MYBOOTJDK_1.7/:启动jdk的路径;
–with-debug-level=slowdebug:编译时debug的级别,有release, fastdebug, slowdebug 三种级别;
–enable-debug-symbols ZIP_DEBUGINFO_FILES=0:生成调试的符号信息,并且不压缩;
若在configure过程中提示安装工具,则在安装完工具后执行make clean进行清理方可再次configure,否则会config不成功。
configure成功后执行make 编译工作,这将是个漫长的等待过程,我编译的时候总共花费了一个半小时,当看到以下信息的时候,就意味着大功告成!
----- Build times -------
Start 2017-08-19 20:08:26
End 2017-08-19 22:03:37
00:04:32 corba
00:03:02 demos
00:20:23 docs
00:27:00 hotspot
00:05:30 images
00:01:45 jaxp
00:03:12 jaxws
00:43:27 jdk
00:04:01 langtools
00:02:15 nashorn
01:55:11 TOTAL
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
这里的话我看java版本的路径是这个:./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version
然后cd 到编译后的openjdk目录下的bin子目录,熟悉吧?就是我们平时用的jdk下的bin目录,然后执行熟悉的java -version,输出如下:
[root@localhost bin]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)
- 1
- 2
- 3
- 4
这样以后就可以用自己编译的jdk了!
编译完jdk就结束了吗?然而对jvm的学习,编译jdk仅仅是一个开端,接下来就是调试、学习jdk,打开jvm之门,去探索java世界的奥秘!