Ubuntu18.04下编译JDK12

由于最近一直在研究并发,所以难免会搞到Java的底层源码,所以编译JDK的源码是非常有必要的,笔者编译JDK源码的环境如下:

系统:Ubuntu18.04.4
JDK源码:JDK12

请尽量和笔者的编译环境一致。

  1. 下载JDK12的源码

    1. 方式一:Linux下面直接执行如下的命令

      hg clone https://hg.openjdk.java.net/jdk/jdk12
      

      在这里插入图片描述

      下载完成过后的目录情况
      在这里插入图片描述

    2. 方式二:直接去openjdk的官网下载,具体的地址是:https://hg.openjdk.java.net/jdk/jdk12

      在这里插入图片描述

  2. 构建编译环境:

    1. 在Ubuntu系统上安装GCC

      sudo apt-get update
      sudo apt-get install build-essential
      

      在这里插入图片描述

    2. 安装OpenJDK编译依赖库

      1. FreeType的安装

        sudo apt-get install libfreetype6-dev
        

        在这里插入图片描述

      2. CUPS的安装

        sudo apt-get install libcups2-dev
        

        在这里插入图片描述

      3. X11安装

        sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev
        

        在这里插入图片描述

      4. ALSA安装

        sudo apt-get install libasound2-dev
        

        在这里插入图片描述

      5. libffi安装

        sudo apt-get install libffi-dev
        

        在这里插入图片描述

      6. Autoconf安装

        sudo apt-get install autoconf
        

        在这里插入图片描述

      7. 最后,假设要编译大版本号为N的JDK,我们还要准备一个大版本号至少为N-1的、已经编译好的JDK。这是因为OpenJDK由多个部分(HotSpot、 JDK类库、 JAXWS、 JAXP……) 构成, 其中一部分( HotSpot) 代码使用C、 C++编写, 而更多的代码则是使用Java语言来实现, 因此编译这些Java代码就需要用到另一个编译期可用的JDK, 官方称这个JDK为“Bootstrap JDK”。 编译OpenJDK 12时, Bootstrap JDK必须使用JDK 11及之后的版本。 在Ubuntu中使用以下命令安装OpenJDK11:

        sudo apt-get install openjdk-11-jdk
        

        在这里插入图片描述

    3. 进行编译

      1. 编译前依赖项的检查,参数配置和构建输出目录结构,具体命令如下:

        bash configure --enable-debug --with-jvm-variants=server
        

        在这里插入图片描述

        发现有个报错,于是根据它的提示执行了如下命令

        sudo apt-get install libfontconfig1-dev
        

        在这里插入图片描述

        再次执行config的命令

        在这里插入图片描述

        发现预编译通过,接下来就可以编译,但是笔者在编译的过程发现了一个致命的问题,就是jdk12的源码路径不能有中文,于是我将其移动到一个没有中文目录的路径下进行编译

      2. 进行编译

        make images
        

        在这里插入图片描述

        有个地方会卡很久,请耐心等待

        在这里插入图片描述

        最后就编译成功

        在这里插入图片描述

        测试编译是否成功,进入编译目录下的build/linux-x86_64-server-fastdebug/jdk/bin/,执行如下的命令:

        ./java -version
        

        在这里插入图片描述

    4. 在IDE工具中进行源码的调试

      1. 下载安装,网址是:https://www.jetbrains.com/clion/

        在这里插入图片描述

      2. 在JDK12的根目下新建CMakeLists.txt文件,具体内容如下

        cmake_minimum_required(VERSION 3.7)
        project(hotspot)
        include_directories(
        		src/hotspot/cpu
        		src/hotspot/os
        		src/hotspot/os_cpu
        		src/hotspot/share
        		src/hotspot/share/precompiled
        		src/hotspot/share/include
        		src/java.base/unix/native/include
        		src/java.base/share/native/include
        		src/java.base/share/native/libjli
        )
        file(GLOB_RECURSE SOURCE_FILES "*.cpp" "*.hpp" "*.c" "*.h")
        add_executable(hotspot ${SOURCE_FILES})
        
      3. 导入项目

        在这里插入图片描述

        选择刚才创建好的CMakeLists.txt打开即可。

        在这里插入图片描述

        等待项目构建完成。

        在这里插入图片描述

    5. 测试调试

      1. 编写Java代码放到jdk12/build/linux-x86_64-server-fastdebug/jdk/bin/,具体编写的Java代码如下

        public class Test{
        	public static void main(String[] args){	
        		System.out.println("haha");
        	}
        }
        
      2. 将此代码编译成.class文件

      3. 配置Clion中运行配置

        在这里插入图片描述

      4. 调试

        • 在java.c文件中JavaMain打上对应的断点,然后点击调试

        在这里插入图片描述

        在这里插入图片描述

至此所有的编译和调试工作全部做完,主要参考了周志明大佬的《深入理解JVM虚拟机》

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值