Ubuntu16.04编译OpenJDK7u40
下图是OpenJDK6、OpenJDK7、OpenJDK7u和OpenJDK8这几个项目之间的关系:

下面把编译步骤记录下来:
- 编译环境 Ubuntu 16.04.4 LTS
- jdk版本 openjdk-7u40-fcs-src-b43-26_aug_2013.zip
1 Build Environments
1.1 编译环境:Ubuntu 16.04
vagrant@ubuntu:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial
1.2 配置apt-get源
# http://wiki.ubuntu.org.cn/源列表
vi /etc/apt/sources.list
参考模板,把下面的内容写入到/etc/apt/sources.list
deb http://mirrors.sohu.com/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.sohu.com/ubuntu/ xenial-backports main restricted universe multiverse
##測試版源
deb http://mirrors.sohu.com/ubuntu/ xenial-proposed main restricted universe multiverse
# 源碼
deb-src http://mirrors.sohu.com/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.sohu.com/ubuntu/ xenial-backports main restricted universe multiverse
##測試版源
deb-src http://mirrors.sohu.com/ubuntu/ xenial-proposed main restricted universe multiverse
# Canonical 合作夥伴和附加
deb http://archive.canonical.com/ubuntu/ xenial partner
deb http://extras.ubuntu.com/ubuntu/ xenial main
服务器列表
# 阿里云
http://cn.archive.ubuntu.com/ubuntu/
# 搜狐(山東聯通千兆接入)
http://mirrors.sohu.com/ubuntu/
# 中科大 LUG(合肥,電信/聯通/移動/教育網自動分流,同時也是 Deepin 官方)
https://mirrors.ustc.edu.cn/ubuntu/ (v4/v6)
http://mirrors4.ustc.edu.cn/ubuntu/ (v4)
http://mirrors6.ustc.edu.cn/ubuntu/ (v6)
1.3 安装依赖项目
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install build-essential gawk m4 libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev binutils libmotif-dev x11proto-print-dev binutils ant -y
# 安装解压工具,解压源码用到
sudo apt-get install unzip -y
1.4 单独安装jdk6
这里安装的oraclejdk-6
# Downloads and installs Oracle Java 6 from here:
# http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html#jdk-6u45-oth-JPR
wget \
--no-cookies \
--no-check-certificate \
--header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" \
http://download.oracle.com/otn-pub/java/jdk/6u45-b06/jdk-6u45-linux-x64.bin
chmod +x jdk-6u45-linux-x64.bin
./jdk-6u45-linux-x64.bin
sudo mv -T jdk1.6.0_45 /usr/lib/jvm/java-6-oracle-amd64
sudo chown -R root: /usr/lib/jvm/java-6-oracle-amd64
# 记住这个路径(/usr/lib/jvm/java-6-oracle-amd64),后面会用到
2 Getting the Source
下载源码,可以通过仓库中获取或直接下载官方打包好的源码包
# 创建一个目录来存放下载的jdk源码
mkdir /work/jvm && cd /work/jvm
# 下载
# wget http://www.java.net/download/openjdk/jdk7/promoted/b24/openjdk-7u6-fcs-src-b24-28_aug_2012.zip
wget https://download.java.net/openjdk/jdk7u40/promoted/b43/openjdk-7u40-fcs-src-b43-26_aug_2013.zip
验证源码包
md5sum openjdk-7u40-fcs-src-b43-26_aug_2013.zip
18dd8e96b2d7344635dd96fd280cc18b openjdk-7u40-fcs-src-b43-26_aug_2013.zip
解压源码包
# 解压,解压后的目录为openjdk
unzip openjdk-7u40-fcs-src-b43-26_aug_2013.zip
# 查看编译文档
openjdk/README-builds.html
3 Build
3.1 编译前的准备
为避免编译出错,需要做的操作
# 通过修改CurrencyData.properties,把10年之前的时间修改为10年之内
vi jdk/src/share/classes/java/util/CurrencyData.properties
2008--->2017
2006--->2017
2005--->2017
2004--->2017
# 创建编译输出目录
mkdir -p /work/jvm/jdkBuild/openjdk7u40/build
# 进入解压后的源码目录/work/jvm/openjdk
cd /work/jvm/openjdk
3.2 设置环境变量并编译
保存成脚本init.sh,执行脚本,待脚本成功执行完毕就编译好了,当然中间会遇到各种小问题
export LANG=C
# Bootstrap JDK的安装路径
export ALT_BOOTDIR=/usr/lib/jvm/java-6-oracle-amd64
export ALT_JDK_IMPORT_PATH=/usr/lib/jvm/java-6-oracle-amd64
# 允许下载依赖
export ALLOW_DOWNLOADS=true
# 并行编译的线程数,设置为和内核CPU一致
export HOTSPOT_BUILD_JOBS=8
export ALT_PARALLEL_COMPILE_JOBS=8
# 跳过"比较本次build出来的映像与先前版本的差异"
export SKIP_COMPARE_IMAGES=true
# 使用预编译头文件,加上编译会快一点
export USE_PRECOMPILED_HEADER=true
# 要编译的内容
export BUILD_LANGTOOLS=true
export BUILD_HOTSPOT=true
export BUILD_JDK=true
# 设置为false,避开javaws和浏览器Java插件之友的部分的build
export BUILD_DEPLOY=false
# 设置为false,就不会build出安装包
export BUILD_INSTALL=false
# fix error
export DISABLE_HOTSPOT_OS_VERSION_CHECK=OK
# 编译结果所存放的路径
export ALT_OUTPUTDIR=/work/jvm/jdkBuild/openjdk7u40/build
# 去掉这两个变量以避免不必要的错误
unset JAVA_HOME
unset CLASSPATH
# 检查
make sanity
# 编译
make 2>&1 | tee $ALT_OUTPUTDIR/build.log
执行编译
sudo sh init.sh
3.3 遇到的问题
在编译过程中遇到了各种问题,但大部分都能通过“编译前的准备”和”设置环境变量”这两步的配置来避免,但是下面这个错误在第一次编译出现,第二次编译出现,第三次编译就没有了,好奇怪。
第一次编译过程中出现如下错误(RMIConnectioinImpl_Stub.class Error),再次编译
第二次编译又出现如下错误(RMIServicerImpl_Stub.class Error),再次编译就成功了。
3.4 可遇到的问题
下面是在初始编译时遇到问题参考的别人总结的解决方法。把错误的关键字在下面博客页面中查找肯定能查找到解决方法的。
- http://jaychang.iteye.com/blog/2397232
- http://openjdk.5641.n7.nabble.com/problem-with-zip-dll-when-building-7u-td165683.html
- http://www.mamicode.com/info-detail-1440652.html
- http://chenjingbo.iteye.com/blog/1117021
- http://cduym.iteye.com/blog/1892416
- http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/raw-rev/a6eef545f1a2
- http://stackoverflow.com/questions/12742128/build-openjdk7-on-ubuntu-12-04
- https://bugs.launchpad.net/ubuntu/+source/openjdk-7/+bug/935346
- http://www.centoscn.com/image-text/install/2015/0908/6140.html
- http://blog.csdn.net/gobitan/article/details/24322561
- http://softbeta.iteye.com/blog/1560047
- http://bugs.java.com/bugdatabase/view_bug.do?bug_id=7058133
3.5 编译成功
编译结束后,将输出类似下面的日志清单所示内容。如果之前已经全量编译过,只修改了少量文件,增量编译可以在数十秒内完成。
进入OpenJDK源码下的build/j2sdk-image目录,验证一下:
4 Reference
Ubuntu16.04编译OpenJDK7u40的更多相关文章
- Ubuntu16.04编译安装php
#Ubuntu16.04编译安装php Ubuntu16.04上面搭建基于Nginx的php服务.Nginx使用apt直接安装的. sudo apt install nginx php的安装部署步骤主 ...
- Ubuntu16.04编译Android6.0/cm13.0教程及相关错误解决办法
一.必备工作 1.安装依赖库 sudo apt--dev libesd0-dev git-core gnupg flex bison gperf build-essential zip curl zl ...
- ubuntu16.04编译安装mysql-boost-5.7.21并编译成php扩展测试与使用
我之前的文章已经改造了自定义MVC框架中的工具类(验证码,图片上传,图像处理,分类)4个类,接下来,就要改造模型类,模型类肯定要连接数据库,由于我的Ubuntu Linux是裸装的php(目前只编译了 ...
- Ubuntu16.04编译安装tensorflow,2018最新血泪踩坑之后的全面总结!绝对成功!【转】
本文转载自:https://blog.csdn.net/pzh11001/article/details/79683133 大家好,我是 (深度学习硬件DIY总群)(719577294)群主: ...
- ubuntu16.04编译QT5.6所依赖的库
首先在QT的根目录下,阅读README文件! 里面介绍了ubuntu环境下,编译该版本的QT需要安装的包 New dependencies in Qt 5 ------------------- ...
- Ubuntu16.04编译tensorflow的C++接口
原文:https://www.bearoom.xyz/2018/09/27/ubuntu1604buildtf4cpp/ 之前有一篇介绍到在windows下利用VS2015编译tensorflow的C ...
- Ubuntu16.04编译libjpeg-turbo库
一.环境依赖 CMake v2.8.12或以后 NASM or YASM (if building x86 or x86-64 SIMD extensions),如果使用NASM, 依赖2.10之后版 ...
- Ubuntu16.04编译Openjdk8,笔者亲测编译成功
现在很多语言都不开发运行环境了,都选择在JRE上运行,足以证明JVM的优越.你精通了JVM,未来的路才可能走得轻松.这篇文章是你走近jvm的第一篇,编译Openjdk8源码 编译环境 操作系统:Ubu ...
- ORB_SLAM2 Ubuntu16.04编译错误
Ubuntu14.04一切正常,迁移到Ubuntu16.04后编译报错,提示: /usr/include/eigen3/Eigen/src/Core/AssignEvaluator.h:745:3: ...
随机推荐
- 关于 video 播放的新探索
前端同学要使用 HTML5 播放器视频,必然会使用 video 标签,不过大多数同学只是使用了较简单的功能,其实它本身拥有不凡之力有待我们发现. 首先,我们先来看下 video 最基础的用法: 使用 ...
- 文档声明(Doctype)和<!Doctype html>有何作用? 严格模式与混杂模式如何区分?它们有何意义?
文档声明的作用: 文档声明是为了告诉浏览器,当前HTML文档使用什么版本的HTML来写的,这样浏览器才能按照声明的版本来正确的解析. <!doctype html> 的作用就是让浏览器进入 ...
- nginx负载均衡的五种方式
文章目录 前言 :负载均衡是什么 一.方式1:轮询 二.方式2:权重 方式3:iphash 方式4:最小连接 方式5:fair 总结:根据这几种方式可以猜测处nginx的底层使用了计数器,从而可以将海 ...
- kubectl creat -f 创建pod时出错
如果创建yaml时候,sts中已经存在,但是get pod又查不到已经启动的pod可以这样 [root@k3master src]# kubectl get pod //查不到eureka NAME ...
- mysql-cluster-gpl-7.5.10-linux-glibc2.12-x86_64.tar.gz (有必要解释一下)
大部分软件我们接触的时候会发现,起的名称有点怪异,所以我觉得有必要解释一下. 比如: mysql-cluster-gpl-7.5.10-linux-glibc2.12-x86_64.tar.gz 名称 ...
- 自家APP打开微信小程序,可行吗?
小程序的通用解决方案,今天为大家介绍一下FinClip.它的最大特点,就是能够让任何 App 运行小程序. 只需要在你的 App 里面,引入它的 SDK,就能加载运行外部小程序了.除了 SDK,它还提 ...
- java的collection类
collection来源于java.util包. Collection 接口常用的方法 size():返回集合中元素的个数 add(Object obj):向集合中添加一个元素 addAll(Coll ...
- addEventListener() 和 removeEventListener() 简介
DOM方法 addEventListener() 和 removeEventListener() 是用来分配和删除事件的函数 这两个方法都需要三个参数 分别为: 事件名称(String) ...
- Spring Cloud之负载均衡组件Ribbon原理分析
目录 前言 一个问题引发的思考 Ribbon的简单使用 Ribbon 原理分析 @LoadBalanced 注解 @Qualifier注解 LoadBalancerAutoConfiguration ...
- JDBC中常用的类和接口
<零基础学Java> JDBC中常用的类和接口 利用JDBC的这些类和接口可以更方便地访问并处理存储在数据库中的数据. DriverManager类 DriverManager类 是JDB ...