最新在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.一键安装依赖项,在命令行中输入
如果还是不行则
4.在你解压OpenJDK7的路径下,一般是openjdk下创建build.sh文件,
并粘贴
这里注意如果make sanity 如果出现warning 将环境语言变成英语C的话,在命令行中
再看看build.sh的中文是否变成乱码变成乱码就是成功。先别运行看下面
二.错误解决和编译
错误
1.编译过程会出现
2编译过程会出现
3.有时候编译OpenJDK7会出现
这时我们编译时用下面的命令
4.如果出现下面的错误
开始编译
1. 上面注意错误中的1.2你在编译前先修改掉,免得错误出现再修改
2.运行配置脚本
三.编译成功的结果
1.查看openjdk/build的东西,如图下面
2.进入linux-amd64
进入将j2sdk-server-image/bin运行java
-version 就看到
笔者是在虚拟机上进行的安装,虚拟机上安装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.sh3.进行编译
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 就看到
相关文章推荐
- Ubuntu(64位)编译Android源码常见错误解决办法
- 64位Ubuntu 11.04编译运行Android 2.3其他错误解决
- 在Ubuntu 64位环境下编译Liunx内核出现 Can't use 'defined(@array)' 错误的解决办法
- Ubuntu10.04 LTS 64位编译android4.1.2_r1遇到的错误及解决方法
- 在Ubuntu 64位环境下编译Liunx内核出现 Can't use 'defined(@array)' 错误的解决办法
- 在Ubuntu 64位环境下编译Liunx内核出现 Can't use 'defined(@array)' 错误的解决办法
- 在Ubuntu 64位环境下编译Liunx内核出现 Can't use 'defined(@array)' 错误的解决办法
- 【转】 64位ubuntu编译运行android2.3其他错误解决——适用于11.04(64位)
- 在64位 ubuntu下编译wine1.8.1出现错误的解决
- 在Ubuntu 64位环境下编译Liunx内核出现 Can't use 'defined(@array)' 错误的解决办法
- 关于在ubuntu16.04 64位系统上安装交叉编译工具出现错误的解决方法
- 【转】 VS2008在64位Windows平台上编译ArcEngine导致HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)错误的解决办法
- VS2008在64位Windows平台上编译ArcEngine导致HRESULT:0x80040154 (REGDB_E_CLASSNOTREG)错误的解决办法
- Ubuntu10.10 编译Android2.3源码时遇到的错误和解决办法
- MySQL++ gcc4.6.1 Ubuntu编译错误解决
- ubuntu10.10下编译android 2.3遇到的错误及解决方法
- ubuntu 编译 Android 出现的若干错误及解决方法
- ubuntu 编译 Android 出现的若干错误及解决方法
- ubuntu 编译 Android 出现的若干错误及解决方法
- Ubuntu11.04(64位)编译Android2.3源码常见错误解决办法