zoukankan      html  css  js  c++  java
  • 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-8-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的源码进行不可描述的游戏了。

    "总是要走一些弯路,才能知道正确的路是什么。开发是这样,学习是这样,人生也是这样。"

  • 相关阅读:
    OPENSSL库使用--AES篇
    Linux inotify功能及实现原理
    LSI RAID
    Linux下关于热插拔硬盘的指令
    最长回文字串理解(学习Manacher's algorithm)
    pat 1068 动态规划/Fina More Conis
    (二)Myeclipse中关于jdk配置,解决版本不一致问题
    (一)MyEclipse配置Tomcat,与jsp程序运行
    pat 1047 解题心得
    pat 1038 Smallest Number解题心得
  • 原文地址:https://www.cnblogs.com/yanggb/p/10904927.html
Copyright © 2011-2022 走看看