文档章节

Ubuntu16.04之编译OpenJDK7源代码(记第一篇)

桃核儿
 桃核儿
发布于 2017/08/19 22:37
字数 1051
阅读 180
收藏 0

        本文主要是讲解今天实测Ubuntu16.04编译OpenJDK7源代码,方便以后的JDK源码阅读以及HotSpot的学习,如有疑问可以在底下留言,有不足之处请指正。

一.涉及软件工具

二.JDK安装配置

        这个东西比较基础,大致就是解压jdk1.6.0_45、openjdk-7u6放到一个目录下,然后在/etc/profile中配置路径,当然配置到全局中也是可以的,接着用命令行设置默认Java编译器。(其实据我实践,不设置不影响编译过程,设了当然最好,博主因为已经装了1.8版本的JDK就没设置。),初学者不懂怎么设置可以点击这里看详细操作。

三.下载依赖工具

        因为openjdk的源码有的使用C++编写,有的使用c编写,还有文档啊什么的一大堆,总之就是不止Java,所以要下一些依赖工具辅助编译,当然起主要作用还是jdk1.6.0_45(用官方说法就是BootStrap JDK)。下面的一串命令可以整个复制到命令行使用,有可能有个别不能下载是软件版本的原因,解决方法,根据提示更改新的版本,或者暂时去掉不能下的,之后单独下,问题不大。

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 install libcups2-dev

sudo apt-get install ant

sudo apt-get install libfreetype6-dev

sudo apt-get install libasound2-dev

这几个出错的概率会大一点。

四.需要自己写一个shell脚本配置一些参数

简单的make命令了解一下,简单的shell语言格式了解一下就好了。

博主自己的test.sh脚本

#!/bin/bash
#设置语言
export LANG=C

#自己的解压路径
export ALT_BOOTDIR=/home/maozuowei/software/jdk/jdk1.6/jdk1.6.0_45
#允许自动下载依赖包
export ALLOW_DOWNLOADS=true
#使用预编译头文件,不加这个编译会更慢
export USE_PRECOMPILED_HEADER=true
#要编译的内容
export BUILD_LANGTOOLS=true
export BUILD_JAXP=true
export BUILD_JAXWS=true
export BUILD_CORBA=true
export BUILD_HOSTPOT=true
export BUILD_JDK=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/maozuowei/software/openjdk/build

#之前配置的环境变量要无效掉不然会出错
unset CLASSPATH
unset JAVA_HOME

#make语言

make sanity
make 2>&1 | tee $ALT_OUTPUTDIR/test.log

 

注意这个脚本要放在openjdk7解压的目录里面不是同级!有详细标注,黄色的可以修改,

看不懂的百度。

执行脚本的命令   ./test.sh 

如果出现错误根据错误提示修改就好,错误很详细。

五.编译过程会遇到的错误

博主遇到的错误和大家分享一下

"*** This OS is not supported:" `uname -a`; exit 1;
*** This OS is not supported: Linux maozuowei-Inspiron-3541 4.10.0-32-generic #36~16.04.1-Ubuntu SMP Wed Aug 9 09:19:02 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux
/home/maozuowei/software/openjdk/hotspot/make/linux/Makefile:240: recipe for target 'check_os_version' failed

像这种是版本冲突,内核版本和JDK的有冲突,解决方案(选一种即可):

  • 注释掉hotspot/make/linux/Makefile里面的checkOS
  • 在make参数后面添加 DISABLE_HOTSPOT_OS_VERSION_CHECK=OK
  • 找到SUPPORTED_OS_VERSION变量在后面追加4%
< ../../../src/share/classes/java/util/CurrencyData.properties
Error: time is more than 10 years from present: 1136059200000

这种错误是因为日期过期了,需要修改配置文件里的参数

进入<OpenJDK源码目录>/jdk/src/share/classes/java/util/CurrencyData.properties,

找到CurencyData.properties,将所有涉及到时间修改为10年之内的时间,

例如,将2004-01-13-20-00-00 修改成 2016-01-13-20-00-00。

六.等待编译成功

博主展示一下成功的结果

希望大家马到成功。

© 著作权归作者所有

桃核儿
粉丝 1
博文 16
码字总数 12740
作品 0
广州
程序员
私信 提问
加载中

评论(2)

桃核儿
桃核儿 博主

引用来自“神预”的评论

大神,./test.sh 权限不够,求解释

回复@神预 : 文件的权限可以修改,你是没有执行的权限还是读写的权限,(sudo chmod a+x test.sh (-x执行、-r读、-w写)),希望能帮到你
神预
神预
大神,./test.sh 权限不够,求解释
我使用Asp.net MVC WebAPI支持OData协议进行分页操作的笔记(第三篇)

第三篇笔记,这是自己 Asp.net MVC OData协议 分页解决方案的 最后一记啦、OK,let's go ! 第一件事儿! 第一件事儿,就是下载这个组件了,你可以通过下面提供的附件下载,当然也可以下载源码...

点儿都不扯
2015/05/23
0
0
OpenJDK与JDK的区别分析

一、以下是具体分析: 以下内容转自http://fgh2011.iteye.com/blog/1771649: 使用过LINUX的人都应该知道,在大多数LINUX发行版本里,内置或者通过软件源安装JDK的话,都是安装的OpenJDK,那...

君满楼001
2017/12/02
0
0
编译openjdk遇到的问题

hello,大家好, 最近我在编译openjdk7, 在编译 hotspot时,提示: 然后在builder页面中貌似也中也找不到解决方案,求大神帮忙//////

宿舍楼顶
2016/08/08
874
2
敏捷教练成长记:秋高气爽第四周

不知不觉坚持了四周了,这周很忙,写读书笔记时尽显疲态,有厌倦的感觉了。需要自我调整,继续坚持。 1、敏捷方面读不少于50页的书或者文章。 阅读《持续交付-发布可靠软件的系统方法》第三章...

转型实践者
2017/11/26
0
0
在Ubuntu16编译openjdk7遇到的一些问题

今天看周志明老师的,这边在编译openJDK7时出了一些问题,我使用的是jdk1.6.0_45 我的配置: 我遇到的问题: 请大神们帮忙看看,感激不尽!

大大的微笑
2017/10/22
116
3

没有更多内容

加载失败,请刷新页面

加载更多

EDI 电子数据交换全解指南

EDI(Electronic Data Interchange,电子数据交换)技术使得企业与企业(B2B)实现通信自动化,帮助交易伙伴和组织更快更好地完成更多工作,并消除了人工操作带来的错误。从零售商到制造商、物...

EDI知行软件
今天
3
0
CentOS7的LVM动态扩容

# 问题 CentOS7上面的磁盘空间有点紧张,需要扩容。 解决 查询当前磁盘状态 [root@xxx ~]# lsblkNAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTfd0 2:0 1 4K ...

亚林瓜子
今天
3
0
Kafka 0.8 Producer (0.9以前版本适用)

Kafka旧版本producer由scala编写,0.9以后已经废除 示例代码如下: import kafka.producer.KeyedMessage;import kafka.javaapi.producer.Producer;import kafka.producer.ProducerConfig;......

实时计算
今天
4
0
Giraph源码分析(八)—— 统计每个SuperStep中参与计算的顶点数目

作者|白松 目的:科研中,需要分析在每次迭代过程中参与计算的顶点数目,来进一步优化系统。比如,在SSSP的compute()方法最后一行,都会把当前顶点voteToHalt,即变为InActive状态。所以每次...

数澜科技
今天
6
0
Navicat 快捷键

操作 结果 ctrl+q 打开查询窗口 ctrl+/ 注释sql语句 ctrl+shift +/ 解除注释 ctrl+r 运行查询窗口的sql语句 ctrl+shift+r 只运行选中的sql语句 F6 打开一个mysql命令行窗口 ctrl+l 删除一行 ...

低至一折起
今天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部