欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Fedora 16下编译OpenJDK 7

程序员文章站 2022-05-19 23:25:24
...


由于最近需要研究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)