欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-04-27 08:52:30
...

这两天看了《深入理解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


这是我遇到的一些问题。希望可以帮助你们!ubuntu13 编译openjdk7的问题并解决(真的一大堆)

相关标签: JVM openjdk