Ubuntu1.6.4环境下编译openjdk

3 篇文章 0 订阅
1 篇文章 0 订阅

1.下载OpenJDK源码

http://www.java.net/download/openjdk/jdk7/promoted/b147/openjdk-7-fcs-src-b147-27_jun_2011.zip   //我使用的JDK7

2.安装编译所需要的依赖

sudo apt-get install build-essential gawk m4 libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev binutils libmotif-common libmotif-dev ant
sudo apt-get install libx11-dev
sudo apt-get install libxt-dev
sudo apt-get install libxext-dev
sudo apt-get install libxtst-dev

3.安装JDK

下载jdk1.6(http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html)
赋予.bin的jdk安装包的执行权限,执行命令:chmod u+x jdk-6u25-linux-x64.bin 
执行命令:sudo ./jdk-6u25-linux-x64.bin

4.配置环境变量

终端跳转到OpenJDK源码所在的目录,配置如下环境变量:

#!/bin/bash  
#设置语言  
export LANG=C  
export ALT_BOOTDIR=/home/resound/jdk/jdk1.6.0_45
#允许自动下载依赖包  
export ALLOW_DOWNLOADS=true  
#手工下载的依赖包所在的目录:jaxp145_01.zip、jdk7-jaf-2010_08_19.zip、jdk7-jaxws2_2_4-b03-2011_05_27.zip
export ALT_DROPS_DIR=/home/resound/openjdk/drop
#使用预编译头文件,不加这个编译会更慢  
export USE_PRECOMPILED_HEADER=true

#要编译的内容  
export BUILD_LANGTOOLS=true  
export BUILD_JAXP=true  
export BUILD_JAXWS=true  
export BUILD_CORBA=true  
export BUILD_HOSTPOT=true  
export BUILD_JDK=true  

#要编译的版本  
export SKIP_DEBUG_BUILD=false  
export SKIP_FASTDEBUG_BUILD=true  
export DEBUG_NAME=debug  

#把它设置为FALSE可以避免javaws和浏览器Java插件之类的部分build  
BUILD_DEPLOY=false

#把它设置为false就不会build出安装包。因为安装包里有一些奇怪的依赖  
#但即便不build出它也已经得到完整的JDK镜像,所以还是不用build它  
BUILD_INSTALL=false  

#存放编译结果  
export ALT_OUTPUTDIR=/home/resound/openjdk/build

unset CLASSPATH  
unset JAVA_HOME  
make 2>&1 | tee $ALT_OUTPUTDIR/build.log

5.编译OpenJDK源码

make sanity //检查编译,出现Sanity check passed 表示检查通过
make //正式编译 会出现一些错误,后续有我遇到的一些错误和解决方案
export JAVA_HOME=/home/resound/openjdk/build/j2sdk-image
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=.:${JAVA_HOME}/bin:$PATH
//配置JAVA_HOME指向编译结果,或将编译结果移动至JAVA_HOME
$ java -version//查看执行结果,编译出来的虚拟机,在-version命令中带有用户的机器名

6.遇到的问题

(1)ERROR: echo "*** This OS is not supported:" 'uname -a'; exit 1;

在我们下载的HotSpot源代码中,默认支持的Linux内核最高版本为2.6,而我们所用的发行版很有可能采用了高于此版本的Linux内核。例如,所用的Ubuntu的内核是3.5(可通过uname -r命令查看自己内核版本)。如果不进行一些调整的话,编译HotSpot时可能会遇到如下报错:

"*** This OS is not supported:" 'uname –a'; exit 1;```
如果遇到这个问题,可以在这个文件中找到解决办法:hotspot/make/linux/Makefile。在Makefile文件中,定位到包含字符串“SUPPORTED_OS_VERSION”的代码,并在该行末尾增加“3.5%”,这样就可以使HotSpot支持我们实际使用的内核版本,调整后的代码如下:
SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 2.7% 3.5%
另一种调整方法是绕过验证操作系统版本的步骤。如清单1-13所示的定位到包含字符串“check_os_version”的代码,将其删除或者注释掉便可。
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

(2)jaxp145_01.zip、jdk7-jaf-2010_08_19.zip、jdk7-jaxws2_2_4-b03-2011_05_27.zip依赖包下载地址变更

mkdir drop
cd drop
curl -L -O http://download.java.net/jaxp/1.4.5/jaxp145_01.zip
curl -L -O http://download.java.net/glassfish/components/jax-ws/openjdk/jdk7/jdk7-jaxws2_2_4-b03-2011_05_27.zip
jaf地址:https://osdn.net/projects/sfnet_jdk7src/downloads/input-archives/jdk7-jaf-2010_08_19.zip/
将jar下载的包放到drop目录下
追加配置环境变量:export ALT_DROPS_DIR=/home/resound/openjdk/drop

(3)error: "__LEAF" redefined [-Werror]

cdefs.h中定义的宏“LEAF”与interfaceSupport.hpp冲突。可以在interfaceSupport.hpp中增加一个“#undef LEAF”语句来解决冲突,具体代码如下:
// LEAF routines do not lock, GC or throw exceptions 
#ifdef __LEAF 
#undef __LEAF 
#define __LEAF(result_type, header)		\
  TRACE_CALL(result_type, header)		\
  debug_only(NoHandleMark __hm;)		\
  /* begin of body */ 
#endif 

(4)error: converting 'false' to pointer type 'methodOop' [-Werror=conversion-null]

对应的文件的对应方法return false改成return NULL;

(6)Unable to load native library: /home/mengxiansen/program/java/jdk1.7.0_10/jre/lib/amd64/libjava.so: symbol JVM_SetNativeThreadName, version SUNWprivate_1.1 not defined in file libjvm.so with link time reference
出现以上问题,可以尝试使用使用Oracle的jdk6代替jdk7编译openjdk

(7)不识别'-mimpure-text'参数

错误信息:
gcc: error: unrecognized command line option '-mimpure-text'
make[5]: *** [/openjdk/build/linux-amd64/../linux-amd64-debug/lib/amd64/libverify.so] Error 1
解决办法:
gcc版本问题,这个命令在本机所用的4.7.2版的gcc中已经去除,既然不能降低gcc版本(本机ubuntu12.10内核用4.7.2版gcc编译),那
就在 【解压缩目录】/make/common/shared/Compiler-gcc.gmk 中去掉 -mimpure-text 命令

(8)出现Error: time is more than 10 years from present: 1104530400000,把以下文件中的所有时间修改成2010年 

如果没有找到该文件,就全盘搜索 
/jdk/src/share/classes/java/util/CurrencyData.properties
今年是2018年,把小于2008年的都改成2008年之后

(9)undefined reference to 'snd_pcm_*' 

错误信息:*** [/home/zlh/openjdk/build/linux-amd64/../linux-amd64-fastdebug/lib/amd64/libjsoundalsa.so] Error 1
解决方案:jdk/make/javax/sound/jsoundalsa/Makefile文件的LDFLAGS += -lasound 改成 OTHER_LDLIBS += -lasound
并在后面追加:EXTRA_LIBS += -lasound 
如果出现其他 "undefined reference to ..."错误可以临时注释掉部分代码 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值