Ubuntu14.04编译OpenJDK8遇到的一些问题
2017-03-25 00:00
337 查看
摘要: 编译openjdk的资料已经被很多人写过了,我这里就不再详细的说了,大概记录一下我的编译脚本和编译过程中遇到的一些问题。
目标:编译openjdk8
环境:ubuntu14.04.1 ,还有一些依赖包可以通过一条命令来安装
sudo apt-get install build-essential libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev libcups2-dev libfreetype6-dev libasound2-dev
全编译:
1.下载openjdk源代码
hg clone http://hg.openjdk.java.net/jdk8/jdk8
需要安装Mercurial库。
2.配置环境变量
export LANG=C
#在openjdk8中已经把ALT开头的环境变量遗弃了,BOOTDIR可以通过后面的Configure文件进行配置
#export ALT_BOOTDIR=/usr/lib/jvm/jdk1.8.0_121
#export ALT_JDK_IMPORT_PATH=/usr/lib/jvm/jdk1.8.0_121
#export ALT_BOOTDIR=/usr/lib/jvm/java-7-oracle
#export ALT_JDK_IMPORT_PATH=/usr/lib/jvm/java-7-oracle
export ALLOW_DOWNLOADS=true
export HOST_BUILD_JOBS=6
export USE_PRECOMPILED_HEADER=true
export BUILD_LANGTOOLS=true
#export BUILD_JAXP=true
#export BUILD_JAXWS=true
#export BUILD_CORBA=true
export BUILD_HOTSPOT=true
export BUILD_JDK=true
export BUILD_INSTALL=false
#export ALT_OUTPUTDIR=/home/archer/dev/openjdk_build
unset JAVA_HOME
unset CLASSPATH
export WARNINGS_ARE_ERRORS=false
export SKIP_DEBUG_BUILD=false
export SKIP_FASTDEBUG_BUILD=true
export DEBUG_NAME=debug
3.执行configure
configure --with-boot-jdk=/opt/java/jdk7
还有一些其他的参数也可以这么配置,比如:64位操作系统编译64位虚拟机还需要添加参数--with-target-bits=64.这个文件可以执行多次。
4.开始编译
make all。
5.查看结果
编译后的结果就在build/linux-x86_64-normal-server-release/image/j2sdk-image
6.单独编译HOTSPOT
#export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
#export JAVA_HOME=/usr/lib/jvm/java-7-oracle/
ALT_BOOTDIR=$JAVA_HOME
export ALT_BOOTDIR
ALT_JDK_IMPORT_PATH=$JAVA_HOME
export ALT_JDK_IMPORT_PATH
ANT_HOME=/usr/share/ant/bin
export ANT_HOME
PATH=$ANT_HOME/bin:$PATH
export PATH
HOTSPOT_BUILD_JOBS=6
export HOTSPOT_BUILD_JOBS
ALT_OUTPUTDIR=/home/archer/dev/openjdk_build
export ALT_OUTPUTDIR
export ARCH_DATA_MODEL=64
mkdir -p $ALT_OUTPUTDIR
rm -f $ALT_OUTPUTDIR/hotspot_debug.log
cd make
DEBUG_BINARIES=true make clean debug debug1 2>&1 | tee $ALT_OUTPUTDIR/hotspot_debug.log
单独编译hotspot还是可以用ALT开头的配置的。编译的结果就在ALT_OUTPUTDIR目录下,根据编译的级别找相应的目录,例如这里是debug,debug目录下就是编译的内容。
7.编译过程中遇到的一些问题
问题1:[2]/usr/include/features.h:356:25: 致命错误: sys/cdefs.h:没有那个文件或目录
To compile 32 bit binaries on 64 bit Linux version, you have to Install libx32gcc development package and 32 bit GNU C Library
try this
解决
sudo apt-get install libx32gcc-4.8-dev
sudo apt-get install libc6-dev-i386
问题2:/usr/include/c++/4.8/new:39:28: fatal error: bits/c++config.h: 没有那个文件或目录
解决:sudo apt-get install gcc-4.8-multilib g++-4.8-multilib (对应gcc -v版本)
问题3:cc1plus: error: the "stabs" debug format cannot be used with pre-compiled headers [-Werror=deprecate]
解决:因为高版本的gcc不再支持stabs,解决办法:在make命令中加上 DEBUG_BINARIES=true
这几个是我编译的时候问题。
以上就是编译openjdk8的整个过程,其实在编译之前可以看看源代码文件夹下的README-builds.html,里面是官方对编译过程的一些参考
PS:但我在编完用GDB测试hotspot的时候报错,Unable to load native library: /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libjava.so: symbol JVM_SetProtectionDomain, version SUNWprivate_1.1 not defined in file libjvm.so with link time reference
我一查,发现jdk8中JNI把JVM_SetProtectionDomain删了,在hotsopt脚本中的执行jdk是之前定义的BOOTJDK,也就是jdk7,所以用jdk7来测试我们8编译出来的虚拟机,就报错了,把hotspot中的jdk改成我们编译出来的JDK就可以成功执行了。
目标:编译openjdk8
环境:ubuntu14.04.1 ,还有一些依赖包可以通过一条命令来安装
sudo apt-get install build-essential libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev libcups2-dev libfreetype6-dev libasound2-dev
全编译:
1.下载openjdk源代码
hg clone http://hg.openjdk.java.net/jdk8/jdk8
需要安装Mercurial库。
2.配置环境变量
export LANG=C
#在openjdk8中已经把ALT开头的环境变量遗弃了,BOOTDIR可以通过后面的Configure文件进行配置
#export ALT_BOOTDIR=/usr/lib/jvm/jdk1.8.0_121
#export ALT_JDK_IMPORT_PATH=/usr/lib/jvm/jdk1.8.0_121
#export ALT_BOOTDIR=/usr/lib/jvm/java-7-oracle
#export ALT_JDK_IMPORT_PATH=/usr/lib/jvm/java-7-oracle
export ALLOW_DOWNLOADS=true
export HOST_BUILD_JOBS=6
export USE_PRECOMPILED_HEADER=true
export BUILD_LANGTOOLS=true
#export BUILD_JAXP=true
#export BUILD_JAXWS=true
#export BUILD_CORBA=true
export BUILD_HOTSPOT=true
export BUILD_JDK=true
export BUILD_INSTALL=false
#export ALT_OUTPUTDIR=/home/archer/dev/openjdk_build
unset JAVA_HOME
unset CLASSPATH
export WARNINGS_ARE_ERRORS=false
export SKIP_DEBUG_BUILD=false
export SKIP_FASTDEBUG_BUILD=true
export DEBUG_NAME=debug
3.执行configure
configure --with-boot-jdk=/opt/java/jdk7
还有一些其他的参数也可以这么配置,比如:64位操作系统编译64位虚拟机还需要添加参数--with-target-bits=64.这个文件可以执行多次。
4.开始编译
make all。
5.查看结果
编译后的结果就在build/linux-x86_64-normal-server-release/image/j2sdk-image
6.单独编译HOTSPOT
#export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
#export JAVA_HOME=/usr/lib/jvm/java-7-oracle/
ALT_BOOTDIR=$JAVA_HOME
export ALT_BOOTDIR
ALT_JDK_IMPORT_PATH=$JAVA_HOME
export ALT_JDK_IMPORT_PATH
ANT_HOME=/usr/share/ant/bin
export ANT_HOME
PATH=$ANT_HOME/bin:$PATH
export PATH
HOTSPOT_BUILD_JOBS=6
export HOTSPOT_BUILD_JOBS
ALT_OUTPUTDIR=/home/archer/dev/openjdk_build
export ALT_OUTPUTDIR
export ARCH_DATA_MODEL=64
mkdir -p $ALT_OUTPUTDIR
rm -f $ALT_OUTPUTDIR/hotspot_debug.log
cd make
DEBUG_BINARIES=true make clean debug debug1 2>&1 | tee $ALT_OUTPUTDIR/hotspot_debug.log
单独编译hotspot还是可以用ALT开头的配置的。编译的结果就在ALT_OUTPUTDIR目录下,根据编译的级别找相应的目录,例如这里是debug,debug目录下就是编译的内容。
7.编译过程中遇到的一些问题
问题1:[2]/usr/include/features.h:356:25: 致命错误: sys/cdefs.h:没有那个文件或目录
To compile 32 bit binaries on 64 bit Linux version, you have to Install libx32gcc development package and 32 bit GNU C Library
try this
解决
sudo apt-get install libx32gcc-4.8-dev
sudo apt-get install libc6-dev-i386
问题2:/usr/include/c++/4.8/new:39:28: fatal error: bits/c++config.h: 没有那个文件或目录
解决:sudo apt-get install gcc-4.8-multilib g++-4.8-multilib (对应gcc -v版本)
问题3:cc1plus: error: the "stabs" debug format cannot be used with pre-compiled headers [-Werror=deprecate]
解决:因为高版本的gcc不再支持stabs,解决办法:在make命令中加上 DEBUG_BINARIES=true
这几个是我编译的时候问题。
以上就是编译openjdk8的整个过程,其实在编译之前可以看看源代码文件夹下的README-builds.html,里面是官方对编译过程的一些参考
PS:但我在编完用GDB测试hotspot的时候报错,Unable to load native library: /usr/lib/jvm/java-7-oracle/jre/lib/amd64/libjava.so: symbol JVM_SetProtectionDomain, version SUNWprivate_1.1 not defined in file libjvm.so with link time reference
我一查,发现jdk8中JNI把JVM_SetProtectionDomain删了,在hotsopt脚本中的执行jdk是之前定义的BOOTJDK,也就是jdk7,所以用jdk7来测试我们8编译出来的虚拟机,就报错了,把hotspot中的jdk改成我们编译出来的JDK就可以成功执行了。
相关文章推荐
- ubuntu14.04编译yael v438 遇到的一些问题
- NVIDIA官方提供的OpenCL实例在Ubuntu14.04编译遇到的问题
- ubuntu配置android开发环境和编译源码遇到的一些问题
- ubuntu上编译安装apache步骤、遇到的一些问题解法
- ubuntu14.04(32位)下编译android4.4时遇到的问题
- 基于ubuntu14.04下编译linux-2.6.34版本内核的步骤和遇到的一些问题及解决
- 在ubuntu 14.04 64bit上安装rails遇到的一些gem问题
- 将ubuntu14.04 从mysql从5.5删除之后安装5.7遇到的一些问题(本篇不讨论热升级)
- ubuntu下编译gsoap遇到的一些问题
- ubuntu配置android开发环境和编译源码遇到的一些问题
- ubuntu配置android开发环境和编译源码遇到的一些问题
- LDD3在Ubuntu下编译 scull例子时遇到的一些问题
- Hadoop在Ubuntu上安装遇到的一些问题
- 整理一下安装Ubuntu以来遇到的一些问题(二)
- ubuntu下搭建rtems交叉编译环境所遇到的问题
- ubuntu11.10 下编译 opencv2.4 所遇到的问题总结
- 升级Ubuntu 12.04所遇到的一些问题
- 天天记录 - Ubuntu系统再次编译android 4.1.2遇到问题
- 关于我遇到的java中编译没错运行出错的一些问题(不定期更新)
- ubuntu11.0.4下编译Android2.3源码过程遇到问题解决