免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2279 | 回复: 0
打印 上一主题 下一主题

在debian上编译自己的JDK [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-02 16:14 |只看该作者 |倒序浏览

                                                因为工作关系需要建立自己的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/hpi/native_threads/src/interrupt_md.c:113:
              error: static declaration of ‘sigignore’ follows
              non-static declaration
  • j2se/src/share/native/sun/awt/cmm/spsearch.c:1335: error: static
              declaration of ‘TestFileCB’ follows non-static
              declaration
  • j2se/src/share/back/error_messages.c:42: error: static
              declaration of ‘vprint_message’ follows non-static
              declaration
  • j2se/src/javaws/share/native/launchFile.c:66: error: static
              declaration of ‘iksSecureProperty’ follows non-static
              declaration
  • j2se/src/javaws/share/native/xmlparser.c:53: error: static
              declaration of ‘RemoveNonAsciiUTF8FromBuffer’ follows
              non-static declaration
  • j2se/src/solaris/native/sun/awt/awt_dnd.c:172: error: static
              declaration of ‘xerror_code’ follows non-static
              declaratio
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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP