最新在Ubuntu 14.04.5 64位上编译OpenJDK7和错误解决

来源:互联网 发布:重庆西南大学网络教育 编辑:程序博客网 时间:2024/06/06 06:36

编译环境:

      笔者是在虚拟机上进行的安装,虚拟机上安装Ubuntu 14.04.5 LTS下载链接地址。

一.编译前的准备

    1.下载OpenJDK7 下载链接www.java.net/download/openjdk/jdk7u40/promoted/b43/openjdk-7u40-fcs-src-b43-26_aug_2013.zip

解压到一个你的工作路径下,最好看一下里面的README-builds.html,这个文件里面有编译需要的各种环境。

      2.安装BootstrapJDK ,因为OpenJDK各个组成部分(Hotspot,JDK API,JAXWS,JAXP....)有的是c++写的更多代码是Java自身实现的,所以编译这些java代码需要一个JDK,官方称这个叫BootStrap JDK。编译OpenJDK7需要JDK6 Update 14或者以后的版本,这里笔者用JDK7 Update4(你也可以用JDK8不要相信别人写的用JDK6这个是个坑)。这里个大坑先说一下我们要用 Oracle的jdk1.7.0_79的jdk自行安装配置,不要相信网上的用OpenJDK6,因为Ubuntu 14.04更新软件后默认安装的ant是1.9.3需要JDK1.7以上的,如果我们安装JDK6当我们下载ant时会同时下载JDK1.7并且在/usr/lib/jvm下有一个default-jdk,这样以后整个工作会出好多bug

      3.一键安装依赖项,在命令行中输入

    

sudo apt-get install build essential gawk m4 libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev binutils libmotif3 libmotif-dev ant
  如果安装时发现不了依赖项则先进行

sudo apt-get update
更新软件

   如果还是不行则

sudo apt-get install aptitude
sudo aptitude install build essential gawk m4 libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev binutils libmotif3 libmotif-dev ant
就可以了关于什么是aptitude自行百度

       4.在你解压OpenJDK7的路径下,一般是openjdk下创建build.sh文件,

cd /home/hanghang/JVMWorkSpace/openjdksudo vim build.sh

并粘贴

# 语言选项,必须设置,否则编译好后会出现一个 HashTable 的 NPE错export LANG=C# Bootstrap JDK 解压路径,必须设置export ALT_BOOTDIR=/usr/lib/jvm/jdk1.7.0_79# 允许自动下载export ALLOW_DOWNLOADS=true# 并行编译线程数export HOTSPOT_BUILD_JOBS=4export ALT_PARALLEL_COMPILE_JOBS=4# 比较本次 build 出来的映像与先前版本的差异,对我们没有意义# 必须设置为 false,否则 sanity 检查为报缺少先前版本 JDK 的映像的错误提示export SKIP_COMPARE_IMAGE=false# 使用预编译头文件,不加这个编译会变慢export USE_PRECOMPILED_HEADER=true# 要编译的内容 这里我们全编译其实只要前三个就可以了自行注释export BUILD_LANGTOOLS=trueexport BUILD_HOTSPOT=trueexport BUILD_JDK=trueexport BUILD_JAXWS=trueexport BUILD_JAXP=trueexport BUILD_CORBA=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 映像,所以还是别 buildBUILD_INSTALL=false# 编译结果所存放的路径export ALT_OUTPUTDIR=/home/hanghang/JVMWorkSpace/openjdk/build# 这两个环境变量必须去掉,不然会发生奇怪的事情# Makefile 检查到这两个变量就会提示警告unset JAVA_HOMEunset CLASSPATHmake sanity

这里注意如果make sanity 如果出现warning 将环境语言变成英语C的话,在命令行中

sudo LANG=C

再看看build.sh的中文是否变成乱码变成乱码就是成功。先别运行看下面

二.错误解决和编译

错误

 1.编译过程会出现

cd linux_amd64_compiler2/product && ./test_gammajava full version "1.7.0_79"./gamma: relocation error: /usr/lib/jvm/java......libjava.so: symbol JVM_FindClassFormCaller, version SUMWprivate_1.1 not defined in file libjvm.so with link time reference
的错误,这个错误据说是OpenJDK 和 Oracle JDK 版本冲突引起的 BUG,这里我们提前修改了他。进入openjdk/hotspot/make/linux 将Makefile中的 test_gamma所在行全部注释掉,具体方法用vim打开Makefile,在编辑模式/test_gamma查找,查找到#注释,编辑模式按大写N向下继续查找注释。

     2编译过程会出现

# 自2015年开始一般会出现如下异常  /opt/jdk1.6.0_31/bin/java  -Xmx896m -Xms128m -XX:PermSize=32m -XX:MaxPermSize=160m -jar /root/openjdk6/build/btjars/generatecurrencydata.jar -o /root/openjdk6/build/lib/currency.data.temp \                  < ../../../src/share/classes/java/util/CurrencyData.properties  Error: time is more than 10 years from present: 1120165200000  java.lang.RuntimeException: time is more than 10 years from present: 1120165200000          at build.tools.generatecurrencydata.GenerateCurrencyData.makeSpecialCaseEntry(GenerateCurrencyData.java:285)          at build.tools.generatecurrencydata.GenerateCurrencyData.buildMainAndSpecialCaseTables(GenerateCurrencyData.java:225)          at build.tools.generatecurrencydata.GenerateCurrencyData.main(GenerateCurrencyData.java:154)  make[4]: *** [/root/openjdk6/build/lib/currency.data] Error 1  
错误,需要修改源码目录中的一个文件,这个文件是<OpenJDK源码目录>/jdk/src/share/classes/java/util/CurrencyData.properties。我们需要做的是把文件中以下的时间改为10年内的一个时间:

AZ=AZM;2005-12-31-20-00-00;AZNMZ=MZM;2006-06-30-22-00-00;MZNRO=ROL;2005-06-30-21-00-00;RONTR=TRL;2004-12-31-22-00-00;TRYVE=VEB;2008-01-01-04-00-00;VEF
具体做法1.用vim打开在编辑模式下/;200*查找到各个信息修改掉2.用vim的批量替换策略自行百度

    3.有时候编译OpenJDK7会出现

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

这时我们编译时用下面的命令

make DISABLE_HOTSPOT_OS_VERSION_CHECK=OK

   4.如果出现下面的错误

Error: JAVA_HOME is not defined correctly.We cannot execute /NO_BOOTDIR/bin/java
这个没有发现ALT_BOOTDIR,虽然build.sh已经设置了,我们在编译命令中加入这个

make ALT_BOOTDIR=/usr/lib/jvm/jdk1.7.0_80 DISABLE_HOTSPOT_OS_VERSION_CHECK=OK


开始编译

   1. 上面注意错误中的1.2你在编译前先修改掉,免得错误出现再修改

   2.运行配置脚本

sudo sh build.sh
   3.进行编译

make ALT_BOOTDIR=/usr/lib/jvm/jdk1.7.0_80 DISABLE_HOTSPOT_OS_VERSION_CHECK=OK
之后等待编译我的机子运行了两个小时左右,如果按照我的思路来,一般就上面几个错误。如果你的ubuntu缺少对应的so自行百度安装,然后再次编译运行

三.编译成功的结果

    1.查看openjdk/build的东西,如图下面


        2.进入linux-amd64


进入将j2sdk-server-image/bin运行java -version 就看到










    

0 0
原创粉丝点击