编译openjdk1.7

来源:互联网 发布:公知什么意思 编辑:程序博客网 时间:2024/05/18 17:42

环境说明:

Ubuntu  16

jdk源码 1.7

jdk环境 1.7

编译步骤:

使用脚步进行编译,根据个人实际情况,自行修改

#!/bin/sh#语言选项,这个必须设置,否则编译好后会出现一个HashTable的NPE错export LANG=C#Bootstrap JDK的安装路径。必须设置export ALT_BOOTDIR=/environment/jdk1.7.0_79/#允许自动下载依赖export ALLOW_DOWNLOADS=true#并行编译的线程数,设置为和CPU内核数量一致即可export HOTSPOT_BUILD_JOBS=4export ALT_PARALLEL_COMPILE_JOBS=4#比较本次build出来的映像与先前版本的差异。这对我们来说没有意义,#必须设置为false,否则sanity检查会报缺少先前版本JDK的映像的错误提示。#如果已经设置dev或者DEV_ONLY=true,这个不显式设置也行export SKIP_COMPARE_IMAGES=true#使用预编译头文件,不加这个编译会更慢一些export USE_PRECOMPILED_HEADER=true#要编译的内容export BUILD_LANGTOOLS=true#export BUILD_JAXP=false#export BUILD_JAXWS=false#export BUILD_CORBA=falseexport BUILD_HOTSPOT=trueexport BUILD_JDK=true#要编译的版本#export SKIP_DEBUG_BUILD=false#export SKIP_FASTDEBUG_BUILD=true#export DEBUG_NAME=debug#把它设置为false可以避开javaws和浏览器Java插件之类的部分的buildBUILD_DEPLOY=false#把它设置为false就不会build出安装包。因为安装包里有些奇怪的依赖,#但即便不build出它也已经能得到完整的JDK映像,所以还是别build它好了BUILD_INSTALL=false#编译结果所存放的路径export ALT_OUTPUTDIR=/environment/zwj/Develop/JVM/jdkBuild/openjdk_7u4/build#这两个环境变量必须去掉,不然会有很诡异的事情发生(我没有具体查过这些"诡异的#事情",Makefile脚本检查到有这2个变量就会提示警告)unset JAVA_HOMEunset CLASSPATHDEBUG_BINARIES=true make 2>&1|tee $ALT_OUTPUTDIR/build.log
将此脚步放置于openjdk源码根目录下,添加可执行权限之后执行(Ubuntu下记得用sudo),如果运气好的话有可能一次就能成功编译,但是事实上你不可能那么幸运。以下是笔者编译时遇到的一些坑:

提示缺少cups解决方案:sudo apt-get install libcups2-dev

interfaceSupport.hpp:430:0: error: "__LEAF" redefined [-Werror] #define __LEAF(result_type, header) /usr/include/x86_64-linux-gnu/sys/cdefs.h:42:0: note: this is the location of the previous definition #  define __LEAF , __leaf__在interfaceSupport.hpp增加#ifdef __LEAF#undef __LEAF#define __LEAF(result_type, header)                                  \  TRACE_CALL(result_type, header)                                    \  debug_only(NoHandleMark __hm;)                                     \  /* begin of body */#endif

/openjdk/hotspot/src/share/vm/oops/constantPoolOop.cpp:272:39: error: converting 'false' to pointer type 'methodOop' 修改/openjdk/hotspot/src/share/vm/oops/constantPoolOop.cpp 第272行 return false改为return (methodOop)false; 或者 return NULL;


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;

gcc: error: unrecognized command line option '-mimpure-text'gcc版本问题,这个命令在本机所用的4.7.2版的gcc中已经去除,既然不能降低gcc版本(本机ubuntu12.10内核用4.7.2版gcc编译),那就在openjdk/jdk/make/common/shared/Compiler-gcc.gmk 中去掉-mimpure-text命令


 fatal error: X11/Intrinsic.h: No such file or directorysudo apt-get install libxt-dev


/openjdk_7u4/build/tmp/sun/sun.awt.X11/xawt/obj64/XToolkit.o] Error 1sudo apt-get install libxtst-dev


缺少libjsoundalsa.so到编译后存放的目录/environment/zwj/Develop/JVM/jdkBuild/openjdk_7u4/build/lib/amd64中复制libjsound.so 命名为 libjsoundalsa.so






0 0