最近在看《深入理解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源码的更多相关文章

  1. Windows下编译live555源码

    Windos下编译live555源码 环境 Win7 64位 + VS2012 步骤 1)源码下载并解压 在官网上下载最新live555源码,并对其进行解压. 2)VS下建立工程项目 新建Win32项 ...

  2. ubuntu下编译VLC源码

    http://blog.csdn.net/beitiandijun/article/details/9225591ubuntu下编译VLC源码 分类: 视频处理 2013-07-02 17:33 57 ...

  3. Windows 10 x64 下编译 Hadoop 源码

    Windows 10 x64 下编译 Hadoop 源码 环境准备 Hadoop并没有提供官方的 Windows 10 下的安装包,所以需要自己手动来编译,官方文档中 BUILDING.txt 文件中 ...

  4. Windows,linux下编译qt源码(比较简单)

    一.linux下静态编译qt源码 1.取到qt源码并解压到文件夹 2.cd到qt目录下 3.使用configure生成makefile ./configure–prefix /opt/qtstatic ...

  5. 【转】在Ubuntu下编译Android源码并运行Emulator

    原文网址:http://www.mcuos.com/thread-4553-1-1.html 建立编译环境 1.在VirtualBox上安装Ubuntu 2.安装JDK   $ sudo apt-ge ...

  6. mac下编译node源码

    看过一篇win7 64x下面编译node的文章,链接地址:编译nodejs及其源码研究 下面学习一下在mac下面如何编译node源码. 过程也挺简单. 1.下载源码. > mkdir nodes ...

  7. windows下编译lua源码

    所有的lua源码都放在了 src 文件夹下,当然,不同的lua版本目录结构有可能不一样,但是都会有 src 这个文件夹,只有这个才是我们编译必须的.而且lua越做越精简了,5.1的版本里面还有一些te ...

  8. 【转】ubuntu 11.10(32位系统)下编译android源码

    原文网址:http://www.cnblogs.com/dwayne/archive/2011/11/16/2251734.html 本文介绍在ubuntu 11.10系统下编译android 2.3 ...

  9. Linux下编译Qt源码,一定要下载tar.gz版本,否则会报权限不足

    首先下载qt-everywhere-opensource-src-4.8.1源码,下载地址: ftp://ftp.qt-project.org/qt/source/ 在Linux下编译一定要下载qt- ...

随机推荐

  1. python基础(12):函数(二)

    1. 函数参数 之前我们说过了传参,如果我们需要给⼀个函数传参,⽽参数⼜是不确定的,或者我给⼀个函数传很多参数,我的形参就要写很多,很⿇烦,怎么办呢,我们可以考虑使⽤动态参数. 形参的第三种: 动态参 ...

  2. 你以为你真的了解final吗?

    本人免费整理了Java高级资料,涵盖了Java.Redis.MongoDB.MySQL.Zookeeper.Spring Cloud.Dubbo高并发分布式等教程,一共30G,需要自己领取.传送门:h ...

  3. Java生鲜电商平台-IntelliJ IDEA 最新注册码,亲测可用

    2019年IntelliJ IDEA 最新注册码(截止到2020年3月11日) 操作步骤: 第一步:  修改 hosts 文件 ~~~ 在hosts文件中,添加以下映射关系: 0.0.0.0 acco ...

  4. 服务端性能测试技能tree

    ALL: Left: Right: 摘抄一下(觉得不错) 以下来自百度百科 ---- 软件性能测试 软件性能测试是在交替进行负荷和强迫测试时常用的术语.理想的“软件性能测试”(和其他类型的测试)应在需 ...

  5. Taro聊天室|react+taro仿微信聊天App界面|taro聊天实例

    一.项目简述 taro-chatroom是基于Taro多端实例聊天项目,运用Taro+react+react-redux+taroPop+react-native等技术开发的仿微信App界面聊天室,实 ...

  6. cnblogs停止更新,同步到个人博客!

    cnblogs停止更新,同步到个人博客 https://dengpeng.me/!             个人博客地址: https://dengpeng.me

  7. JavaScript 正则表达式 初探

    JavaScript 正则表达式 正则表达式是构成搜索模式的字符序列 搜索模式可用于文本搜索和文本替换操作 使用正则 字符串方法 在JavaScript中,正则表达式常常用两个字符串方法: searc ...

  8. 关于 Android 状态栏的适配总结

    1.要求状态栏透明,我们的内容布局延伸到系统状态栏,就是人们口中说的沉浸式状态栏: Android 5.0 及其以后版本:设置属性 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCR ...

  9. MySQL 部署分布式架构 MyCAT (一)

    架构 环境 主机名 IP db1 192.168.31.205 db2 192.168.31.206 前期准备 开启防火墙,安装配置 mysql (db1,db2) firewall-cmd --pe ...

  10. 201871010111-刘佳华《面向对象程序设计(java)》第十二周学习总结

    201871010111-刘佳华<面向对象程序设计(java)>第十二周学习总结 实验十   集合与GUI初步 实验时间 2019-11-14 第一部分:基础知识总结 第九章知识总结 1. ...