ubuntu13 编译openjdk7的问题并解决(真的一大堆)

这两天看了《深入理解java虚拟机-周志明 第二版》时,试着自己编译源码,一编译就编译了两天,自己一边百度,一边琢磨,总算编译完成。安装环境、依赖软件的就不说了,自己搜索一大堆,这里主要讲下遇到的问题,我建议你问题2以后的问题,你可以提前修改好,不然越到后面编译时间越久,一有问题又要重新编译过。(深有体会)

1.ERROR: Your JAVA_HOME environment variable is set. This will
most likely cause the build to fail. Please unset it
and start your build again.
答:在make sanity检查是否可以编译时,发生这个错误,首先用命令(echo $JAVA_HOME)确认你的java_home路径输出是否正常,如果正常,还会有这个错误,你忘记了unset JAVA_HOME或者没有执行的xx.sh文件。(xx.sh 指自己写的一些命令的文件,不用手一个一个敲,用个文本的形式就可以执行,你看其他人的安装教程都会有教你写这个的)


2.WARNING: LANG has been set to en_US.UTF-8, this can cause build failures.
Try setting LANG to ‘C’.
答:如果你的xx.sh配置文件已配置了export LANG=C,但是你还是出现这个错误的话,说明你的配置没有启动,也可以单独输入这个命令export LANG=C执行。


3.echo “* This OS is not supported:” uname -a; exit 1;
* This OS is not supported: Linux pgc-virtual-machine 3.11.0-12-generic #19-Ubuntu SMP Wed Oct 9 16:12:00 UTC 2013 i686 i686 i686 GNU/Linux
2.3 ERROR: echo “* This OS is not supported:” ‘uname -a‘; exit 1;
答: 注释掉hotspot/make/linux/Makefile里面的checkOS

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

也可以最好的办法是在make参数后面添加 :
DISABLE_HOTSPOT_OS_VERSION_CHECK=OK

4.BUILD FAILED
/home/pgc/Downloads/openjdk/build/jaxws/build/xml_generated/build-drop-jaf_src.xml:96: Redirection detected from https to http. Protocol switch unsafe, not allowed.
答:在这个build-drop-jaf_src.xml的96行中获取包下载的地址失效或有问题,就会导致改问题发生,这时你需要把那些包自己下载,主要是jdk7-jaf-2010_08_19.zip这个包下载不了。
自己操作步骤:
下载依赖的jaxp、jaf、jaxws
jaxp145_01.zip: http://download.java.net/jaxp/1.4.5/jaxp145_01.zip
jdk7-jaxws2_2_4-b03-2011_05_27.zip: http://download.java.net/glassfish/components/jax-ws/openjdk/jdk7/jdk7-jaxws2_2_4-b03-2011_05_27.zip
jdk7-jaf-2010_08_19.zip:https://netix.dl.sourceforge.net/project/jdk7src/input-archives/jdk7-jaf-2010_08_19.zip 这个包360浏览器可以下载下来。(这也行)

进入openjdk目录
mkdir drop (创建drop文件夹)
然后,把这下载到的三个包放到drop文件夹中。移动文件的命令(sudo mv jdk7-jaf-2010_08_19.zip /home/pgc/Downloads/openjdk/drop)
再执行export ALT_DROPS_DIR=/home/pgc/Downloads/openjdk/drop(这是我的路径,你们看着自己路径改)。这一步大功告成(还有更多苦难在后面)。


5.ed.hpp:36:
/home/pgc/Downloads/openjdk/hotspot/src/share/vm/runtime/interfaceSupport.hpp:430:0: error: “__LEAF” redefined [-Werror]
#define __LEAF(result_type, header) \
^
In file included from /usr/include/features.h:374:0,
答: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
第二种方法:网上别人说–打补丁(可是打开下面网址失效的)patch(http://hg.openjdk.java.net/hsx/hsx25/hotspot/rev/a6eef545f1a2)
ps:不清楚路径的话,请开后台的错误信息,可以帮你快速知道路径。


6./home/pgc/Downloads/openjdk/hotspot/src/share/vm/oops/constantPoolOop.cpp:272:39: error: converting ‘false’ to pointer type ‘methodOop’ [-Werror=conversion-null]
if (cpool->cache() == NULL) return false; // nothing to load yet
^
cc1plus: all warnings being treated as errors
答:修改/openjdk/hotspot/src/share/vm/oops/constantPoolOop.cpp 第272行 return false改为return (methodOop)false; 或者 return NULL;


7.openjdk/hotspot/src/share/vm/opto/loopnode.cpp:896:50: error: converting ‘false’ to pointer type ‘Node*
答:修改openjdk/hotspot/src/share/vm/opto/loopnode.cpp: 第896行 return false改为return (Node*)false; 或者 return NULL;


8.ERROR gcc: error: unrecognized command line option ‘-mimpure-text’
答:这个-mimpure-text是gcc给Solaris的编译选项,所以注释掉或删掉即可。
文件在./jdk/make/common/shared/Compiler-gcc.gmk


9.Error: time is more than 10 years from present: 1136059200000
java.lang.RuntimeException: time is more than 10 years from present: 1136059200000
答:# 解决办法
# 修改CurrencyData.properties(路径:jdk/src/share/classes/java/util/CurrencyData.properties)
修改108行
AZ=AZM;2009-12-31-20-00-00;AZN
修改381行
MZ=MZM;2009-06-30-22-00-00;MZN
修改443行
RO=ROL;2009-06-30-21-00-00;RON
修改535行
TR=TRL;2009-12-31-22-00-00;TRY
修改561行
VE=VEB;2009-01-01-04-00-00;VEF


10.collect2: error: ld returned 1 exit status
make[5]: * [/home/pgc/Downloads/openjdk/build/lib/i386/libjsoundalsa.so] Error 1
make[5]: Leaving directory `/home/pgc/Downloads/openjdk/jdk/make/javax/sound/jsoundalsa’
make[4]: * [build] Error 1
答:遇到和”javax/sound/jsoundalsa”相关的一个错误,需要修改openjdk/jdk/make/javax/sound/jsoundalsa目录下的Makefile文件,找到 LDFLAGS += -lasound 修改为 OTHER_LDLIBS += -lasound


这是我遇到的一些问题。希望可以帮助你们!这里写图片描述

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值