Chinaunix

标题: 在debian上编译自己的JDK [打印本页]

作者: tinywind    时间: 2006-10-02 16:14
标题: 在debian上编译自己的JDK

                                                因为工作关系需要建立自己的JDK,尝试了一下在debian上完整编译了JDK6.0
准备工作
系统中需要安装好ksh,gawk,m4,make,libasound2-dev,libcupsys2-dev,libx11-dev,xorg-dev,libXp6-dev
关于编译器,SUN推荐的是gcc3.2,debian缺省安装的是gcc4.1,我测试下来发现4.1检查++代码时更严格,也就是说更难编译,而且有一个内部bug造成最后编译不能完成,后来
我用的是gcc4.0。gcc3.2没有试。
编译时需要系统中已有一个JDK,我安装的是jdk1.5
源代码的获得
有两个途径,一个是去java.sun.com下载,是3个jar包,在图形环境下使用java -jar xxxx.jar执行并解开。可以都解在一个目录中。
另一个途径是去peabody.dev.java.net获得最新的版本,以zip形式发布。
我安装的时候遇见一个古怪现象,用jar命令去解压会发生有些文件没有解开的问题,运行jar命令时没有错误,但在编译时发现有些文件缺少,其实压缩包中是有的,用unzip来解压就没有这个问题,不知道是不是jar的bug。

我最后编译成功的是使用peabody上的最新代码,而且这个版本为debian编译已经作了一些修改。
修改源代码
这是比较无聊的步骤,因为g++4.0使用了更严格的语法检查,许多写得不规范的c++函数声明被认为是错误,需要手工修改。下面列表中的static需要去除。
j2se/src/solaris/bin/java_md.c line 1140,
    "%eax", "%ebx", "%ecx", "%edx" 改为 "%eax", "%ecx", "%edx"
修改Makefile
j2se/make/common/shared/Defs-utils.gmk中修改BASENAME的定义为:
BASENAME       = $(UTILS_USR_BIN_PATH)basenamehotspot/make/Makefile中修改CP的定义为:
CP=/bin/cp
同时j2se/make/docs/Makefile中有两个命令直接使用了cp,修改为$(CP)
hotspot/build/linux/makefiles/gcc.make中CPP,CC改为使用gcc4.0
CPP=g++-4.0
CC=gcc-4.0
注释掉下面这一行WARNINGS_ARE_ERRORS = -Werror,让编译器可以允许warning
j2se/make/common/shared/Compiler-gcc.gmk中要求使用gcc4.0,修改如下:
ifeq ($(PLATFORM), linux)
  # Settings specific to Linux
  CC             = $(COMPILER_PATH)gcc-4.0
  CPP            = $(COMPILER_PATH)gcc-4.0 -E
开始编译
是不是头快爆了,:),我们终于到了最后一步了。在jdk source的安装目录中增加build.sh
#!/bin/bash
export LC_ALL=C
unset JAVA_HOME
export ALT_BOOTDIR=/java/jdk1.5.0_08          # 已安装好的jdk目录
export ALT_OUTPUTDIR=/java/lab/jdk_build_output  # 编译生成的位置
export ALT_DEVTOOLS_PATH=/usr/bin                       # path to 'make'
export BUILD_NUMBER=b99                                 # build number
export ALT_MOZILLA_HEADERS_PATH=/java/lab/jdk_build_b99/share/plugin
export ALT_GCC29_PLUGIN_LIB_PATH=${ALT_BOOTDIR}/jre/plugin/i386/ns7-gcc29
export SKIP_FASTDEBUG_BUILD=true                        # after building the normal build scsl starts building
export SKIP_DEBUG_BUILD=true                            # fastdebug and debug builds which is probably a bug
cd control/make
make dev
运行该脚本,如果一切顺利的话,几个小时后可以看到我们自己的jdk了。

参考文档:
Cay Horstmann写了一片很好地在ubuntu上build jdk得blog http://weblogs.java.net/blog/cayhorstmann/archive/2006/06/honey_i_built_t.html
大部分内容都是来自这个blog的
http://blogs.sun.com/navi/entry/try_this_at_home_building,这个blog是另一个写得在debian上building的文章
当然还有SUN自带的文档,下载的源代码中就有,不过参考价值实在有限。
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u/4200/showart_179414.html




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2