最新在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.sh3.进行编译
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 就看到
- 最新在Ubuntu 14.04.5 64位上编译OpenJDK7和错误解决
- 在ubuntu 12.04 64bit上编译openjdk7
- ubuntu 16.04 64 编译 openjdk7
- 在ubuntu编译openjdk7(转载)
- 在Ubuntu上下载、编译和安装Android最新源代码
- 在Ubuntu上下载、编译和安装Android最新源代码
- 在Ubuntu上下载、编译和安装Android最新源代码
- 在Ubuntu上下载、编译和安装Android最新源代码
- 在Ubuntu上下载、编译和安装Android最新源代码
- 在Ubuntu上下载、编译和安装Android最新源代码
- 在Ubuntu上下载、编译和安装Android最新源代码
- 在Ubuntu上下载、编译和安装Android最新源代码
- 在Ubuntu上下载、编译和安装Android最新源代码
- 在Ubuntu上下载、编译和安装Android最新源代码
- 在Ubuntu上下载、编译和安装Android最新源代码
- 在Ubuntu上下载、编译和安装Android最新源代码
- 在Ubuntu上下载、编译和安装Android最新源代码
- 在Ubuntu上下载、编译和安装Android最新源代码
- HR8P506,时钟配置,一切从内部时钟HRC开始.
- 贝叶斯决策理论
- UE4 vive手柄震动
- js 面向对象编程实例
- 贝叶斯决策论中的参数估计
- 最新在Ubuntu 14.04.5 64位上编译OpenJDK7和错误解决
- 似然函数
- PCA算法是怎么跟协方差矩阵/特征值/特征向量勾搭起来的?
- jquery学习(二)选择器
- Kernel Methods (1) 从简单的例子开始
- Kernel Methods (2) Kernel function
- Kernel Methods (3) Kernel Linear Regression
- vector的使用
- Kernel Methods (4) Kernel SVM