自己动手编译OpenJDK 7(转载)

来源:互联网 发布:淘宝点击率公式 编辑:程序博客网 时间:2024/04/29 14:34

类归于: Java — xubin @ 1:55 下午

OpenJDK的项目早就发布了,想要一探JDK内部的实现机制,最便捷的路径之一就是自己编译一个OpenJDK。

平台:CentOS 5.1 X86-64

1.先去OpenJDK的网站 下载源代码包,比如目前最新的 openjdk-7-ea-src-b74-15_oct_2009.zip。解压缩,假设此根目录为$OPENJDK

2.OpenJDK的部分组件是以二进制插件的方式发布的,所以以下编译,需要先下载安装相应平台的Binary plugs,例如jdk-7-ea-plug-b74-linux-x64-15_oct_2009.jar。下载完之后,java -jar jdk-7-ea-plug-b74-linux-x64-15_oct_2009.jar来安装,此处需要在X window环境下进行(下面配置编译的环境变量的时候,需要配置此安装目录)。而且,也需要之前就需要安装一个可用的JDK环境,称为Bootstrapt JDK,以下编译过程也需要此JDK来编译OpenJDK中的Java源代码。可以选择SUN的 JDK 1.6最新版。

3.下载安装freetype 2.3版本。为了防止和操作系统已安装的freetype冲突,所以选择安装到其他目录:执行 ./configure –prefix=/opt/java/freetype-2.3.11, 然后make && make install

4.按照http://hg.openjdk.java.net/jdk7/build/raw-file/tip/README-builds.html#introduction 上面,检查安装需要的依赖并安装需要的依赖。在我用的CentOS5.1的平台,安装默认没装的cups-devel包。安装ANT 1.6.5,配置ANT_HOME,并将$ANT_HOME加入到PATH下。

ps: 在我的环境下,还会碰到libXi.so的问题,导致链接的时候 ld -lXi 这命令报错。所以先运行 ld -lXi 检查一下是否能解析到libXi.so 这个库,如果ld: warning: cannot find entry symbol _start; not setting start address则表明解析OK,否则OpenJDK在链接的时候,会报此链接库找不到。不同的平台可能会不一样。如果不行,先看是否安装了libXi这个包。如果安装了,在我的CentOS平台上,还需要在/usr/lib64下,做个libXi.so的软链接到同目录下的libXi.so.6

5.运行配置脚本。在$OPENJDK目录下运行 . /jdk/make/jdk_genetic_profile.sh

6.接下来是设置相关的环境变量

export ANT_HOME=/usr/local/ant

export PATH=$PATH:$ANT_HOME/bin     # 有点奇怪,在执行时. jdk/make/jdk_generic_profile.sh时候,会修改PATH,所以这里重新加一下,以防万一

export ALT_BOOTDIR=/opt/java/jdk1.6.0    #BOOTSTRAPT JDK 路径

export ALT_BINARY_PLUGS_PATH=/opt/java/openjdk-binary-plugs     #有部分JDK的组件不是用开源方式发布的。需要下载binary plugs,然后设置此环境变量到安装路径下

export ALT_FREETYPE_LIB_PATH=/opt/java/freetype-2.3.11/lib #freetype的lib路径

export ALT_FREETYPE_LIB_PATH=/opt/java/freetype-2.3.11/lib #freetype的lib路径

export ALT_FREETYPE_HEADERS_PATH=/opt/java/freetype-2.3.11/include #freetype的头文件路径

export ALT_JDK_IMPORT_PATH=/opt/java/jdk1.6.0 #这个要设置一下,否则gmake的时候,会报javah这个命令找不到。用grep -r ‘JAVAH_CMD’ * 查找发现是在$OPENJDK/jdk/make/common/shared/下有 Defs-java.gmk文件中有说明,由于bug-id 6889255,需要使用bootstrapt的javah。当此bug修复之后,可能会有改动。

7.运行gmake sanity ,检查是否有错误,好像还是会报ANT版本的问题,不过后面编译的时候不会有影响。如果有错误,就解决相关的依赖问题。不过注意,重新测试需要先gmake clean 一下,删除之前生成的测试文件。

8.然后 gmake ,出去逛一圈,喝喝茶。回来新编译好的openjdk就静静躺在$OPENJDK/build/下面了,在bin目录下运行./java -version ,看着输出build 1.7.0-internal-alfredxu_2009_10_22_17_39-b00这样的版本信息,是不是有点成就感?

那么从现在开始,就可以开始把JDK这个庞然大物大卸八块,庖丁解牛了。

原创粉丝点击