ubuntu18.04.2下编译openjdk9源码
最近在看《深入理解Java虚拟机 第二版》这本书,上面有关于自己编译OpenJDK源码的内容。自己根据书里的指示去操作,花了三天的时间,重装了好几次Ubuntu(还不知道快照这个功能,好傻一男的),在Ubuntu18.04.2上编译OpenJDK8源码都以失败告终。最后总结出书中关于这部分的内容已经过时了的结论,只能另外想办法。可能可以通过降低Ubuntu的版本(第三方下载旧的历史版本,官方不提供),但是我不愿意这么做,因为我的信条是过时的东西没必要重新捡起来了。最后决定编译OpenJDK9的源码,还好总算是成功了。
1.使用Mercurial下载openJDK9的源码。
Mercurial也是一种版本管理工具,和Git、SVN类似。
要使用Mercurial,先要安装Mercurial:
sudo apt install mercurial
然后就是创建下载OpenJDK9源码的目录:
cd ~
sudo mkdir ~/openJDK9SourceCode
cd /openJDK9SourceCode
然后就可以开始获取OpenJDK9的源码了:
hg clone http://hg.openjdk.java.net/jdk9/dev 9dev
cd 9dev
sh ./get_source.sh
如果网络不好的话,可能在第一行命令执行的时候就挂了。如果网络好的话,第一行命令执行非常快(废话)。这里的第三行则比较慢,大约需要30分钟。
2.安装openJDK8环境。
OpenJDK8可以通过官方的apt intall命令安装。为什么需要安装OpenJDK8呢,因为编译OpenJDK9源码需要OpenJDK8环境。网上都是说编译OpenJDK9源码需要低一个版本的OpenJDK9环境,具体是为什么,咱也不知道,咱也查不到,咱也不知道问谁。
安装OpenJDK8的命令:
sudo apt install openjdk--jdk-headless
耐心等待安装完成即可,环境变量也不用配,会自动帮你配好(没错,apt install就是那么好使)。
当然也可以采用离线安装的方式,具体怎么装我这里就不说了,百度【Ubuntu离线安装JDK9】一大堆教程。
要测试是否安装成功,可以在terminal终端键入查询Java版本的命令:
java -version
如果打印出Java版本的信息,则说明安装成功。

3.安装一些必要的工具包。
编译需要安装一些工具包:
apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev
apt-get install libcups2-dev
4.进行编译检查。
切换到OpenJDK9源码的目录的9dev目录下,使用bash命令进行编译检查:
bash configure --disable-warnings-as-errors --with-debug-level=slowdebug --with-native-debug-symbols=internal
然后这个命令编译检查的过程中会报错、中止并提示需要安装的工具包,按照提示安装工具包即可,安装完就重新执行上面编译检查的命令,反复几次,最后编译检查通过就可以进行编译了。
5.进行编译。
使用make命令进行编译,需要前面编译检查生成的配置文件:
make images
编译的过程很久,耐心等待即可。同时编译的过程会很耗费内存,尽量将虚拟机的内存调大,我是调到了3GB,一般来说2GB应该也是够的。
6.开始调试源代码。
使用gdb命令调试编译后的OpenJDK9源代码:
cd ~/openJDK9SourceCode/9dev/build/linux-x86_64-normal-server-slowdebug/jdk/bin
gdb -tui java

这样就可以愉快地与OpenJDK9的源码进行不可描述的游戏了。
"总是要走一些弯路,才能知道正确的路是什么。开发是这样,学习是这样,人生也是这样。"
ubuntu18.04.2下编译openjdk9源码的更多相关文章
- Windows下编译live555源码
Windos下编译live555源码 环境 Win7 64位 + VS2012 步骤 1)源码下载并解压 在官网上下载最新live555源码,并对其进行解压. 2)VS下建立工程项目 新建Win32项 ...
- ubuntu下编译VLC源码
http://blog.csdn.net/beitiandijun/article/details/9225591ubuntu下编译VLC源码 分类: 视频处理 2013-07-02 17:33 57 ...
- Windows 10 x64 下编译 Hadoop 源码
Windows 10 x64 下编译 Hadoop 源码 环境准备 Hadoop并没有提供官方的 Windows 10 下的安装包,所以需要自己手动来编译,官方文档中 BUILDING.txt 文件中 ...
- Windows,linux下编译qt源码(比较简单)
一.linux下静态编译qt源码 1.取到qt源码并解压到文件夹 2.cd到qt目录下 3.使用configure生成makefile ./configure–prefix /opt/qtstatic ...
- 【转】在Ubuntu下编译Android源码并运行Emulator
原文网址:http://www.mcuos.com/thread-4553-1-1.html 建立编译环境 1.在VirtualBox上安装Ubuntu 2.安装JDK $ sudo apt-ge ...
- mac下编译node源码
看过一篇win7 64x下面编译node的文章,链接地址:编译nodejs及其源码研究 下面学习一下在mac下面如何编译node源码. 过程也挺简单. 1.下载源码. > mkdir nodes ...
- windows下编译lua源码
所有的lua源码都放在了 src 文件夹下,当然,不同的lua版本目录结构有可能不一样,但是都会有 src 这个文件夹,只有这个才是我们编译必须的.而且lua越做越精简了,5.1的版本里面还有一些te ...
- 【转】ubuntu 11.10(32位系统)下编译android源码
原文网址:http://www.cnblogs.com/dwayne/archive/2011/11/16/2251734.html 本文介绍在ubuntu 11.10系统下编译android 2.3 ...
- Linux下编译Qt源码,一定要下载tar.gz版本,否则会报权限不足
首先下载qt-everywhere-opensource-src-4.8.1源码,下载地址: ftp://ftp.qt-project.org/qt/source/ 在Linux下编译一定要下载qt- ...
随机推荐
- 死磕 java同步系列之CountDownLatch源码解析
- iota: Golang 中优雅的常量
阅读约 11 分钟 注:该文作者是 Katrina Owen,原文地址是 iota: Elegant Constants in Golang 有些概念有名字,并且有时候我们关注这些名字,甚至(特别)是 ...
- 通过Desktop.ini设置文件夹备注以及图标
1.新建一个文件夹temp,进入此文件夹,建立desktop.ini文件,编辑内容为: ; 文件夹图标 [.ShellClassInfo] ;设置文件夹的备注 InfoTip=this is temp ...
- opencv::DNN介绍
DNN模块介绍: Tiny-dnn模块 支持深度学习框架 - Caffe - TensorFlow - Torch/PyTorch DNN运用 图像分类 对象检测 实时对象检测 图像分割 预测 视频对 ...
- 程序员的自我修养系列(一):优雅的代码管理工具之GitHub
1.导言 代码管理是程序员经常遇到一个问题,很多童鞋将代码保存到本地硬盘,此种方法管理混乱,也存在代码丢失的风险,且版本无法控制,因此养成良好的代码管理习惯是程序员的必修课.在众多代码管理工具中笔者在 ...
- [Go] gocron源码阅读-go语言中数组和切片的字面值初始化语法
源码中有这么一句,这个函数要求返回的是[]cli.Command,cli.Command类型的切片,这个地方直接使用字面值初始化了一个切片返回去了 return []cli.Command{comma ...
- aspx使用KindEditor副文本框插件出现检测到有潜在危险
web配置添加 <httpRuntime requestValidationMode="2.0" /> aspx页面添加 ValidateRequest=&q ...
- 清空txt文件
如果想在每次写入前清空txt文件里面的内容,不必删掉文件,只需要使用truncate方法就行了,代码 0x01:以读/写的方式打开文件: f = open("read_test.txt&qu ...
- 工具资源系列之给 windows 虚拟机装个 ubuntu
前面我们已经介绍了如何在 Windows 宿主机安装 VMware 虚拟机,这节我们将利用安装好的 VMware 软件安装 Ubuntu 系统. 前情回顾 虚拟机为我们在 Windows 宿主机体验别 ...
- 【2019.8.6 慈溪模拟赛 T3】集合(set)(线段树上DP)
线段树上\(DP\) 首先发现,每个数肯定是向自己的前驱或后继连边的. 则我们开一棵权值线段树,其中每一个节点记录一个\(f_{0/1,0/1}\),表示在这个区间左.右端点是否连过边的情况下,使这个 ...