您的位置:首页 > 编程语言 > Java开发

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

2017-01-22 19:30 260 查看
编译环境:

      笔者是在虚拟机上进行的安装,虚拟机上安装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/openjdk
sudo 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=4
export ALT_PARALLEL_COMPILE_JOBS=4

# 比较本次 build 出来的映像与先前版本的差异,对我们没有意义
# 必须设置为 false,否则 sanity 检查为报缺少先前版本 JDK 的映像的错误提示
export SKIP_COMPARE_IMAGE=false

# 使用预编译头文件,不加这个编译会变慢
export USE_PRECOMPILED_HEADER=true

# 要编译的内容 这里我们全编译其实只要前三个就可以了自行注释
export BUILD_LANGTOOLS=true
export BUILD_HOTSPOT=true
export BUILD_JDK=true
export BUILD_JAXWS=true
export BUILD_JAXP=true
export BUILD_CORBA=true

# 要编译的版本
# export SKIP_DEBUG_BUILD=false
# export SKIP_FASTDEBUG_BUILD=true
# export DEBUG_NAME=debug

# 把它设置为 false 可以避开 javaws 和浏览器 Java 插件之类的部分的 build
BUILD_DEPLOY=false

# 把它设置为 false 就不会 build 出安装包,因为安装包里有奇怪的依赖
# 但即使不 build 出它也能得到完整的 JDK 映像,所以还是别 build
BUILD_INSTALL=false

# 编译结果所存放的路径
export ALT_OUTPUTDIR=/home/hanghang/JVMWorkSpace/openjdk/build

# 这两个环境变量必须去掉,不然会发生奇怪的事情
# Makefile 检查到这两个变量就会提示警告
unset JAVA_HOME
unset CLASSPATH

make sanity


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

sudo LANG=C


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

二.错误解决和编译

错误

 1.编译过程会出现

cd linux_amd64_compiler2/product && ./test_gamma
java 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;AZN

MZ=MZM;2006-06-30-22-00-00;MZN

RO=ROL;2005-06-30-21-00-00;RON

TR=TRL;2004-12-31-22-00-00;TRY

VE=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_HOT
SPOT_OS_VERSION_CHECK=OK


开始编译

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

   2.运行配置脚本

sudo sh build.sh
   3.进行编译

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

三.编译成功的结果

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



        2.进入linux-amd64



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



    
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐