Fedora 16下编译OpenJDK 7


由于最近需要研究JVM,所以打算先自己build一个openjdk试试,hllvm群组里主要提供的都是基于Xubuntu环境,没有RedHat系的,与我的需求不尽相符,只好自己摸索,好在有RednaxelaFX等大神提供的诸多资料,确实提供了许多帮助,下述如有错误纰漏还望各位大神指正。

废话不多说,环境选择了Fedora 16 (64-bit)OpenJDK的版本是openjdk-7-fcs-src-b147-27_jun_2011.zip,源码下载地址http://download.java.net/openjdk/jdk7/

从一个干净的Fedora 16开始build需要不少准备工作,这里强烈建议直接查看OpenJDK Build README,网上有些帖子说的乱七八糟的而且来源还都是同一篇,十分误事,我接下来就把我的经验share一下,操作基本来自于这篇build README,我对linux不是很熟,过程中还是废了不少事儿,另外下面所有的都是在root权限下操作的。

 

  • 首先当然必须有最基本的GNU make,最低版本要求是3.81以上,Fedora 16自带的是3.82的版本,所以这个无需操心。
  • 我在安装fedora的时候,选择了安装Java开发工具,因此系统默认给我装好了openjdk 1.6.0_24版本,如果没有的话用yum-builddep java-1.6.0-openjdk,用网上帖子的话说:“这是安装一个 jdk 6 /usr/lib/jvm/java-openjdk 这个位置。这个JDK 就是所谓的bootstrap jdk. 因为在编译openjdk7 的时候java 部分的代码就是这个来编译的了。”
  • 修改  /root/openjdk/hotspot/make/linux下的Makefile文件,注释掉以下内容
check_os_version:  
#ifeq ($(DISABLE_HOTSPOT_OS_VERSION_CHECK)$(EMPTY_IF_NOT_SUPPORTED),)  
#   $(QUIETLY) >&2 echo "*** This OS is not supported:" `uname -a`; exit 1;  
#endif

这一部分我是在最开始的时候就按照这里说的把这几行给注释掉了,没有亲测,所以也不知道不注释的话到底会不会发生问题。

  • 设置环境变量,进入你下载的openjdk7解压后的文件夹,在shell里输入. jdk/make/jdk_generic_profile.sh,这个是你的bash/sh/kshsetup文件,执行这条命令之后那些LANGALT_BOOTDIR等环境变量都会为你设置好,就不用再自己一条一条地export了。
  • 接下来按照Basic Linux System Setup部分给出的Basic Linux Check List
Basic Linux Check List
1.	Install the Bootstrap JDK, set ALT_BOOTDIR.
2.	Optional Import JDK, set ALT_JDK_IMPORT_PATH.
3.	Install or upgrade the FreeType development package.
4.	Install Ant 1.7.1 or newer, make sure it is in your PATH.

第一条是指构建openjdk的工作需要一个预先安装好的JDK环境用来做引导,由于我们已经的系统里已经装好了openjdk 6,而且环境变量已设置好,所以就不用管了。

第二条里的ALT_JDK_IMPORT_PATH环境变量是在你不需要build整个JDK的时候用到,比如你之前编过整个JDK,这次你不想再build Hotspot虚拟机了,那么你就可以通过这个来设置。

第三条是要求安装FreeTypeREADME里提供的是源码安装的方法,但是通过yum提供了FreeType软件包,所以用yum安装会更方便一些,安装命令:yum install freetype-devel.x86_64

第四条是要求安装Apache AntREADME给的方法是下载源码安装,具体的可以到Ant的官网http://ant.apache.org/去看,源码和安装方法都能找到,我由于之前安装系统是勾选了Java开发那栏,因此Ant貌似已经有了,我没有再手动安装。

  • 弄完了这些你以为就已经完成了吗?No,太naïve了!我以为这些就是Linux Fedora需要的全部dependency了,于是进入到openjdk目录下,执行命令make sanity检查build dependency,结果报出的错误是少了ALSACUPS的一些头文件。我擦,CUPS不是明明列在了SolarisBasic Check List下吗!好吧,那就一个个解决吧。

  1. 安装ALSAyum install alsa-lib-devel.x86_64
  2. CUPS(Common UNIX Printing System)下载了cups-1.6.1-source.tar.bz2源码,把解压后的目录下的cups文件夹copy/usr/include/

接下来make sanity,出现Sanity check passed.通过!终于可以make了,是不是很激动?别急,蛋疼的在后面呢。于是我执行命令make all,它就开始编译了,很久之后,如你所料了,挂了,看问题,貌似是x11没有安装,这是个啥啊,于是我到README里去找,结果发现原来是XRender这玩意,这不是也是在SolarisBasic Check List里的吗

没辙,README里推荐的方法是“使用各特定的Linux版本所提供的包安装”。好吧,yum search xrender,没有精确匹配的,于是找了个最像的安装,yum install libXrender-devel.x86_64

然后继续make,很久之后,down了,报错是“X11/Intrinsic.h: No such file or directory”,这你妈,又是x11的问题好吧,一定是我安装的方式不对,于是各种yum search,没有啊!无奈google之,找了半天在一个fedora论坛的一篇帖子里看到可能是少了一个叫libXt-devel的包,search之,果然有,于是yum install libXt-devel.x86_64

继续make,很久之后,没错你懂的,down了,报错“X11/extensions/shape.h: No such file or directory”。小弟很淡定,一定是我make的诚意不够,google之,发现这次可能是少了个libXtst-devel的包,小事,装之,yum install libXtst-devel.x86_64

继续make,这次过了更久,不过,成功了~

-- Build times ----------
Target debug_build
Start 2013-01-06 19:27:18
End   2013-01-06 20:56:11
00:06:14 corba
00:17:04 hotspot
00:15:16 jaxp
00:15:32 jaxws
00:32:47 jdk
00:01:59 langtools
01:28:53 TOTAL
-------------------------
make[1]: Leaving directory `/root/openjdk'

因此上面的步骤可以总结为:

yum install libXrender-devel.x86_64
yum install libXt-devel.x86_64
yum install libXtst-devel.x86_64

  • 编译成功之后在openjdk目录下会产生一个build文件夹,cd ./build/linux-amd64/bin/,运行./java –version
openjdk version "1.7.0-internal-debug"
OpenJDK Runtime Environment (build 1.7.0-internal-debug-yuyinyang_2013_01_06_19_08-b00)
OpenJDK 64-Bit Server VM (build 21.0-b17-jvmg, mixed mode)

 



 

你可能感兴趣的:(java,OpenJDK,fedora)