最近在看《深入理解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. 【UOJ#242】【UR#16】破坏蛋糕(计算几何)

    [UOJ#242][UR#16]破坏蛋糕(计算几何) 题面 UOJ 题解 为了方便,我们假定最后一条直线是从上往下穿过来的,比如说把它当成坐标系的\(y\)轴. 于是我们可以处理出所有交点,然后把它们 ...

  2. Git分布式版本控制器使用

    前言: 使用Git版本控制器差不多有一年多的时间了,在这一年多的时间里对这个传说的的分布式版本控制工具有了一定的了解.在实战项目开发中,对关于如何在通过Git提交项目,以及如何使用Git命令对提交的文 ...

  3. C#简单的枚举及结构

    using System; namespace program { enum WeekDays { a, b, c = ,//11 赋值以后就变成11,不赋值就是2 d, e, f, g }//不能输 ...

  4. 运行时报:尝试加载 Oracle 客户端库时引发 BadImageFormatException,如果在安装 32 位 Oracle 客户端组件的情况下以 64 位模式运行,将出现此问题

    运行环境为: Windows Server2012 Oracle11g  32位数据库+客户端 IIS发布后提示错误信息: “尝试加载 Oracle 客户端库时引发 BadImageFormatExc ...

  5. String字符串工具类

    字符串类(StringUtil.cs) using System; namespace Sam.OA.Common { /// <summary> /// 字符处理工具类 /// 作者:陈 ...

  6. Android 布局测试

    wrap_content <Button android:id="@+id/button1" android:layout_width="wrap_content& ...

  7. ansible错误ImportError: No module named ansible.runner记录

    按着官网提供的安装ansible To configure the PPA on your machine and install ansible run these commands: $ sudo ...

  8. [Go] gocron源码阅读-go语言中数组和切片的字面值初始化语法

    源码中有这么一句,这个函数要求返回的是[]cli.Command,cli.Command类型的切片,这个地方直接使用字面值初始化了一个切片返回去了 return []cli.Command{comma ...

  9. JAVA SE学习路径

  10. 攻防世界pwn之新手区

    涉及的工具有 Ubuntu 16.04 pwntools IDA gdb-peda 1.get_shell 连接就给flag,可以直接用nc连接,然后输入ls查看里面的目录,发现有名字叫flag文件, ...