CentOS6编译OpenJDK7
一.环境准备
1.jdk
在编译JDK7之前,需要有个JDK6版本,这个貌似有个鸡生蛋,还是蛋生鸡的问题,不过,这个确实需要:)
2.alsa包
linux版本的jdk编译需要ALSA(Advanced Linux Sound Architecture)包,大部分linux发行版都没有预装,CentOS可以通过如下命令检查: rpm -qa |grep alsa alsa-lib和alsa-lib-devel均需要。CentOS缺少alsa-lib-devel,通过如下命令安装: yum install alsa-lib-devel
3.cups-devel
yum install cups-devel ### 4.libXi-devel
yum install libXi-devel
5.freetype2.3
wget http://download.savannah.gnu.org/releases/freetype/freetype-2.3.12.tar.gz
tar -xvf freetype-2.3.12.tar.gz
cd freetype-2.3.12
./configure && make && make install ### 6. ant
wget http://mirror.bit.edu.cn/apache//ant/binaries/apache-ant-1.8.2-bin.zip
unzip apache-ant-1.8.2-bin.zip ### 7.g++
yum install gcc gcc-c++
二、设置环境变量
jdk编译过程中有一些环境变量需要设置,详细的请参考README-builds.html,下面写的只是一些必须设置的环境变量: export ALT_BOOTDIR=/usr/opt/jdk # 预装的jdk7目录 export ANT_HOME=ant安装目录 export ALT_FREETYPE_HEADERS_PATH=/usr/local/include/freetype2 #freetype2头文件安装目录 export ALT_FREETYPE_LIB_PATH=/usr/local/lib #freetype2 lib目录
三、编译
1.健全检查
可以通过如下命令检查环境配置是否准备好:
make sanity ARCH_DATA_MODEL=64 如果最终输出:
Sanity check passed. 则表示环境检查通过,否则需要根据提示信息排查问题。 ### 2.执行编译 通过如下命令开始编译:
make ARCH_DATA_MODEL=64 ### 3.问题排查: 编译过程中出现一些问题:
1)缺少jaxp和jaxws
错误信息 ERROR: Cannot find source for project jaxp 原因是现在jaxp源码分支和jdk源码分支分开了,但是jaxws是jdk中的一部分,所以完全编译需要jaxp源码,针对该问题的描述可以查看README-build.html中TroubleShooting部分。 解决方式有两种: 一种是先下载好源码包,以drops的方式安装,具体参考README-build.html 另外一种是使用在线安装,在编译时加入允许下载源码的配置:
make ARCH_DATA_MODEL=64 ALLOW_DOWNLOADS=true
2)缺少X*库
编译过程中多次出现如下缺少X*, awt之类的错误,基本上都是因为缺乏图形相关的库
../../../src/solaris/native/sun/awt/img_util_md.h:32: ??:expected specifier-qualifier-list before 'XID'
make[5]: *** [/home/jiangbo/Workspace/jdk/openjdk/build/linux-amd64/tmp/sun/sun.awt/awt/obj64/BufImgSurfaceData.o] Error 1
make[5]: *** Waiting for unfinished jobs....
make[5]: Leaving directory `/home/jiangbo/Workspace/jdk/openjdk/jdk/make/sun/awt'
make[4]: *** [library_parallel_compile] Error 2
make[4]: Leaving directory `/home/jiangbo/Workspace/jdk/openjdk/jdk/make/sun/awt'
make[3]: *** [all] Error 1
make[3]: Leaving directory `/home/jiangbo/Workspace/jdk/openjdk/jdk/make/sun'
make[2]: *** [all] Error 1
make[2]: Leaving directory `/home/jiangbo/Workspace/jdk/openjdk/jdk/make'
make[1]: *** [jdk-build] Error 2
make[1]: Leaving directory `/home/jiangbo/Workspace/jdk/openjdk'
make: *** [build_product_image] Error 2
解决方式时安装X相关的库
yum install libX* 这个有些暴力,不过比较有效:)
四、测试编译结果
漫长的编译之后直至出现如下类似内容时,表示编译完成了:
-- Build times ----------
Target all_product_build
Start 2012-02-09 10:38:39
End 2012-02-09 11:14:37
00:01:41 corba
00:06:19 hotspot
00:15:49 jaxp
00:01:30 jaxws
00:10:03 jdk
00:00:36 langtools
00:35:58 TOTAL
编译完成后,编译结果维语build/linux-amd64目录下,可以写个简单的Java程序测试编译结果
Test.java public class Test{ public static void main(String[] args){ System.out.println(“Hello”); } }
编译 [root@localhost openjdk]# ./build/linux-amd64/bin/java Test.java 执行 [root@localhost openjdk]# ./build/linux-amd64/bin/java Test Hello
blog comments powered by Disqus