下载OpenJDK源码
oepnjdk下载地址为 https://jdk7.java.net/source.html
安装编译依赖环境
安装alsa包.
1yum install alsa-lib-devel
安装cups-devel
1yum install cups-devel
安装X相关库
1yum install libX*
安装gcc-c++
1yum install gcc gcc-c++
安装freetype
12rpm -ivh freetype-2.4.11-9.el7.x86_64.rpm下载地址:http://rpm.pbone.net/index.php3/stat/4/idpl/26641422/dir/centos_7/com/freetype-2.4.11-9.el7.x86_64.rpm.html
安装Ant
12tar -zvxf apache-ant-1.9.6-bin.tar.gz下载地址:http://ant.apache.org/bindownload.cgi
也可以使用以下命令一次性完成依赖安装:
|
|
配置环境变量
OpenJDK在编译时需要读取很多环境变量,但大部分都是有默认值的,必须设置的只有两个环境变量: LANG和ALT_BOOTDIR.
LANG是用来设定语言选项的,必须设置为: export LANG=C.
ALT_BOOTDIR则是用来设置Bootstrap JDK的位置,Bootstrap JDK就是一个可用的6u14以上版本的JDK,它是用来编译OpenJDK中部分Java实现的代码的.
另外,如果之前设置了JAVA_HOME和CLASSPATH两个环境变量,在编译之前必须取消,否则在Makefile脚本中检查到有这两个变量存在,会有警告提示.
|
|
其他环境变量如下:
|
|
编译JDK
全部设置好之后,可用在OpenJDK目录下使用 make sanity来检查设置是否正确,如果正确则会会输出:Sanity check passed.
之后,输入make命令开始编译,(make不添加参数默认为编译make all).
编译完成后,可以将目录复制到JAVA_HOME中,作为一个完整的JDK使用,编译出来的虚拟机,在-version命令中带有用户的机器名.
如果只想单独编译HotSpot的话,那么使用hotspot/make目录下的MakeFile进行替换即可,其他参数与前面一致,这时候虚拟机的输出结果存放在build/hotspot/outputdir/linux_amd64_compiler2 中,里面对应了不同的优化级别的目录.
在不同机器上,最后一个目录名称会有所差别,bad表示Mac OS系统(内核为FreeBSD),amd64表示是64位JDK(32位为x86),compiler2表示是Server VM(Client VM表示是compiler1).
在运行虚拟机前,还要手工编辑目录下的env.sh文件,这个文件由编译脚本自动产生,用于设置虚拟机的环境变量,里面已经发布了”JAVA_HOME,CLASSPATH,HOTSPOT_BUILD_USER” 3个环境变量,还需要增加一个“LD_LIBRARY_CLASSPATH”,内容如下:
-
12LD_LIBRARY_PATH=.:${JAVA_HOME}/jre/lib/amd64/native_threads:${JAVA_HOME}/jre/lib/amd64:export LD_LIBRARY_PATH然后执行以下命令启动虚拟机(这时的启动机器名为gamma).
-
12. ./env.sh./gamma -version #有可能是test_gamma,这是自带的一段八皇后代码
Exception
报错:
1Error: time is more than 10 years from present: 1104530400000 when building java/openjdk* lists.freebsd.org
通过修改CurrencyData.properties文件, 把10年之前的时间修改为10年之内即可
Index: /usr/openjdk/jdk/src/share/classes/java/util/CurrencyData.properties把2006改掉就可以重新编译了.
End
资料参考于 <<深入理解 Java虚拟机 第二版>>.