centos 5 5.3 编译openjdk 7

一.环境准备1.jdk

在编译JDK7之前,需要有个JDK6版本,这个貌似有个鸡生蛋,还是蛋生鸡的问题,不过,这个确实需要:)

下载源码:http://download.java.net/openjdk/jdk7/

wget http://www.java.net/download/openjdk/jdk7/promoted/b147/openjdk-7-fcs-src-b147-27_jun_2011.zip

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-develyum install cups-devel4.libXi-develyum install libXi-devel5.freetype2.3wget http://download.savannah.gnu.org/releases/freetype/freetype-2.3.12.tar.gztar -xvf freetype-2.3.12.tar.gzcd freetype-2.3.12./configure && make && make install6. antwget http://mirror.bit.edu.cn/apache//ant/binaries/apache-ant-1.8.2-bin.zipunzip apache-ant-1.8.2-bin.zip7.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

make  ALLOW_DOWNLOADS=true|tee make.log #这样可以通过查看 make.log文件来查看编译过程。

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=true2)缺少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 1make[5]: *** Waiting for unfinished jobs….make[5]: Leaving directory `/home/jiangbo/Workspace/jdk/openjdk/jdk/make/sun/awt’make[4]: *** [library_parallel_compile] Error 2make[4]: Leaving directory `/home/jiangbo/Workspace/jdk/openjdk/jdk/make/sun/awt’make[3]: *** [all] Error 1make[3]: Leaving directory `/home/jiangbo/Workspace/jdk/openjdk/jdk/make/sun’make[2]: *** [all] Error 1make[2]: Leaving directory `/home/jiangbo/Workspace/jdk/openjdk/jdk/make’make[1]: *** [jdk-build] Error 2make[1]: Leaving directory `/home/jiangbo/Workspace/jdk/openjdk’make: *** [build_product_image] Error 2

解决方式时安装X相关的库

yum install libX*

这个有些暴力,不过比较有效:)

四、测试编译结果

漫长的编译之后直至出现如下类似内容时,表示编译完成了:

– Build times ———-Target all_product_buildStart 2012-02-09 10:38:39End 2012-02-09 11:14:3700:01:41 corba00:06:19 hotspot00:15:49 jaxp00:01:30 jaxws00:10:03 jdk00:00:36 langtools00: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

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>