在Ubuntu 16.04上编译OpenJDK8的源代码
本文将详细介绍在Ubuntu16.04上对OpenJDK8进行编译。
1、准备编译环境
使用的操作系统为Ubuntu16.04,如果读者没有安装Ubuntu,可以在Windows上使用虚拟机的方式进行安装,或者可以直接在电脑上安装多系统,这种方式比以虚拟机安装的方式速度要快。Ubuntu操作系统使用的是Linux内核,由于HotSpot是由C++编写的,所以在编译时需要Linux的编译器GCC。
2、下载源代码
OpenJDK使用的代码管理工具为Mercurial(hg),下载并安装Mercurial后就可以通过hg clone命令获取OpenJDK8的源代码了,相关的命令如下:
hg clone http://hg.openjdk.java.net/jdk8/jdk8 openjdk
cd openjdk
bash ./get_source.sh
使用Mercurial下载时速度相对较慢,可以直接去相关网站上下载压缩包,网址为:http://download.java.net/openjdk/jdk8。笔者下载的压缩包为openjdk-8-src-b132-03_mar_2014.zip,使用如下命令对压缩包进行解压:
unzip openjdk-8-src-b132-03_mar_2014.zip
解压后openjdk目录下重要的目录如下表所示。
3、编译源代码
openjdk中的README-builds.html网页提供了编译源代码的相关说明。在Ubuntu操作系统下编译可以分为两步:
第一步,生成编译配置的脚本
生成编译配置的脚本使用的命令如下:
bash ./configure \
--with-target-bits=64 \
--with-boot-jdk=/usr/java/jdk1.7.0_80/ \
--with-debug-level=slowdebug \
--enable-debug-symbols ZIP_DEBUGINFO_FILES=0
运行这个命令对编译的openjdk所需要的依赖进行检查,如果终止,可根据对应的提示安装相关的依赖。命令行选项--with-target-bits指定编译64位系统的JDK; 命令行选项--with-boot-jdk指定引导JDK所在目录,以防其他安装的JDK影响。构建JDK8需要使用JDK7 Update 7或更高版本的版本作为引导JDK,但不应使用JDK8作为引导JDK;命令行选项--with-debug-level=slowdebug,有这个选项,可以在GDB等代码调试过程中提供足够的信息;--enable-debug-symbols ZIP_DEBUGINFO_FILES=0生成调试的符号信息,并且不压缩。
如果命令运行成功,会在当前目录下生成一个目录,目录的名称是根据要编译的目标确定的,如笔者Ubuntu 64位操作系统下生成的目录名为linux-x86_64-normal-server-slowdebug。
第二步,编译
编译使用的命令如下:
make all ZIP_DEBUGINFO_FILES=0
如果命令运行成功,则成功编译出了JDK。运行如下命令:
./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java -version
输出的信息如下:
openjdk version "1.8.0-internal-debug"
OpenJDK Runtime Environment (build 1.8.0-internal-debug-mazhi_2019_08_12_20_52-b00)
OpenJDK 64-Bit Server VM (build 25.0-b70-debug, mixed mode)
在openjdk下创建一个Test.java源文件,内容如下:
public class Test{
public static void main(String[] args){
System.out.println("Hello World!");
}
}
通过Javac编译器编译如上的源代码,得到Test.class文件。
运行如上的Class文件,命令如下:
./build/linux-x86_64-normal-server-slowdebug/jdk/bin/javac Test.java
./build/linux-x86_64-normal-server-slowdebug/jdk/bin/java Test
输出如下的信息:
Hello World!
在Ubuntu 16.04上编译OpenJDK8的源代码的更多相关文章
- ubuntu 16.04 上编译和安装C++机器学习工具包mlpack并编写mlpack-config.cmake | tutorial to compile and install mplack on ubuntu 16.04
本文首发于个人博客https://kezunlin.me/post/1cd6a04d/,欢迎阅读最新内容! tutorial to compile and install mplack on ubun ...
- Ubuntu 16.04上编译SkyEye的测试程序
一.首先确保Ubuntu系统上已经安装了Skyeye.skyeye-testsuite和arm-linux-gcc交叉编译工具链,如果没有安装请参考: 1.Skyeye的安装:http://www.c ...
- 在Ubuntu 16.04 上编译安装OpenCV3.2.0(Cmake + python3 + OpenCV3)(转)
1 安装CMAKE sudo apt-get install cmake 2 安装python及其所依赖的软件包 sudo apt-get install build-essential sudo a ...
- Ubuntu 16.04上安装Global阅读源代码工具
参照10年前写的文档 (Linux源码阅读工具lxr和glimpse的安装与配置),想重新搭建一个源代码阅读工具,发现源里面都没有相关的工具了. 然后看到有更简单的安装工具Global可以使用,所以果 ...
- 如何在Ubuntu 16.04上安装配置Redis
如何在Ubuntu 16.04上安装配置Redis Redis是一个内存中的键值存储,以其灵活性,性能和广泛的语言支持而闻名.在本指南中,我们将演示如何在Ubuntu 16.04服务器上安装和配置Re ...
- (译)综合指南:通过Ubuntu 16.04上从Source构建来安装支持GPU的Caffe2
(译)综合指南:通过Ubuntu 16.04上从Source构建来安装支持GPU的Caffe2 译者注: 原文来自:https://tech.amikelive.com/node-706/compre ...
- [eShopOnContainers 学习系列] - 03 - 在远程 Ubuntu 16.04 上配置开发环境
直接把 md 粘出来了,博客园的富文本编辑器换成 markdown,没啥效果呀 ,先凑合吧.实在不行换地方 # 在远程 Ubuntu 16.04 上配置开发环境 ## 零.因 为什么要用这么麻烦的 ...
- Ubuntu 16.04上安装SkyEye及测试
说明一下,在Ubuntu 16.04上安装SkyEye方法不是原创,是来自互联网,仅供学习参考. 一.检查支持软件包 gcc,make,vim(optional),ssh,subversionbinu ...
- 如何在Ubuntu 16.04上安装Apache Web服务器
转载自:https://www.howtoing.com/how-to-install-the-apache-web-server-on-ubuntu-16-04 介绍 Apache HTTP服务器是 ...
随机推荐
- js实现浏览器打印功能
最近接触到一个新需求,实现打印机打印小票的功能.打的一桌子小票(惭愧),不过也基本满足了业务上的需求,现在分享一下如何实现(好记性不如烂笔头) 先上代码 // 布局代码 <div id=&quo ...
- 用js数组实现最原始的图片轮播实现
上班以来看到了,写了很多的轮播图效果,实现方法大致有 1.将图片局对定位,利用z-index和opacity实现图片渐现 2.用css3 的transtion:Xx xx left/right,实现左 ...
- Java实现 蓝桥杯VIP 基础练习 Sine之舞
问题描述 最近FJ为他的奶牛们开设了数学分析课,FJ知道若要学好这门课,必须有一个好的三角函数基本功.所以他准备和奶牛们做一个"Sine之舞"的游戏,寓教于乐,提高奶牛们的计算能力 ...
- Java实现 LeetCode 94 二叉树的中序遍历
94. 二叉树的中序遍历 给定一个二叉树,返回它的中序 遍历. 示例: 输入: [1,null,2,3] 1 2 / 3 输出: [1,3,2] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? / ...
- java实现SPFA算法
1 问题描述 何为spfa(Shortest Path Faster Algorithm)算法? spfa算法功能:给定一个加权连通图,选取一个顶点,称为起点,求取起点到其它所有顶点之间的最短距离,其 ...
- java实现杨辉三角系数
** 杨辉三角系数** (a+b)的n次幂的展开式中各项的系数很有规律,对于n=2,3,4时分别是:1 2 1, 1 3 3 1,1 4 6 4 1.这些系数构成了著名的杨辉三角形: 1 1 1 1 ...
- 关于VMware虚拟机启动EFI/UEFI支持
作为较新计算机和操作系统用于引导计算机的技术,可扩展固件接口 (EFI) 正在取代 BIOS.EFI 有时称为统一可扩展固件接口 (UEFI). 使用VMware创建虚拟机,默认还是会使用传统的BIO ...
- HashMap源码解析(java1.8.0)
1.1 背景知识 1.1.1 红黑树 二叉查找树可能因为多次插入新节点导致失去平衡,使得查找效率低,查找的复杂度甚至可能会出现线性的,为了解决因为新节点的插入而导致查找树不平衡,此时就出现了红黑树. ...
- 大型Electron应用本地数据库技术选型
开发一个大型Electron的应用,或许需要在客户端存储大量的数据,比如聊天应用或邮件客户端 可选的客户端数据库方案看似很多,但一一对比下来,最优解只有一个 接下来我们就一起来经历一下这个技术选型的过 ...
- 【php】 jsonp转数组函数jsonp_decode
分享一个可以跟json一样用的函数jsonp_decode,能把jsonp格式数据转为php数组或对象. /** * 把jsonp转为php数组 * @param string $jsonp js ...