ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

JDK编译以及在CLion中进行源码调试(抄书+踩坑记录)

2021-05-26 15:03:23  阅读:331  来源: 互联网

标签:JDK 命令 抄书 apt 编译 源码 install CLion


1、写在前面

最近在看《深入理解Java虚拟机》一书,其中第一章有个实验,叫“自己编译JDK”,在做这个实验的过程中,踩了点坑,因此写篇博客记录下

2、环境准备

首先准备一个linux环境,其它环境也可以,不过不在本博客介绍范围内,这里我用虚拟机安装了Ubuntu-18.04.5-desktop-amd64
编译需要用到编译器GCC或者CLang,读者可以任选其一安装,这里博主根据书本推荐,使用下列命令安装了GCC

sudo apt-get install build-essential

接着编译过程需要用到以下第三方库,读者需按照表格中的命令进行安装:

工具库名称安装命令
FreeTypeThe FreeType Projectsudo apt-get install libfreetype6-dev
CUPSCommon UNIX Printing Systemsudo apt-get install libcups2-dev
X11X Window Systemsudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev
ALSAAdvanced Linux Sound Architecturesudo apt-get install libasound2-dev
libffiPortable Foreign Function Interface Librarysudo apt-get install libffi-dev
AutoconfExtensible Package of M4 Macrossudo apt-get install autoconf

在安装第三方库的时候,由于当时博主看的是PC版的微信读书,不能复制命令,于是就在安装X11的时候踩坑了,此处命令中的libx11-dev中的1是数字1,而不是字母L。
安装完第三方库,还需要安装个Bootstrap JDK,意思就是使用低版本的JDK去编译高版本的JDK,这里我们要编译的JDK版本为12,所以Bootstrap JDK就为JDK11,使用以下命令安装:

sudo apt-get install openjdk-11-jdk

到这里编译JDK的环境就搭建好了。

3、获取源码

依照书中所说,获取源码有两种方式:

  • 第一种是用版本控制工具(Mercurial)获取源码
  • 第二种是登录网站直接下载压缩包

书作者在这里推荐第二种,因为源码地址在国外,使用第一种方式获取源码的话可能会花费很长时间,并且有可能会卡在某个地方。
不过我在这里建议大家使用第一种方式,因为我在网站上下载压缩包后,在后续编译过程中遇到了文件缺失的问题。

3.1 第一种方式

直接使用使用下列命令克隆源码:

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

执行此命令可能会遇到错误,比如Mercurial未安装,可用下列命令安装:

sudo apt install mercurial

然后在执行上述克隆命令,最终会在当前目录生成一个叫jdk12的目录。

3.2 第二种方式

使用浏览器访问JDK12源码页面,在如下页面中:
JDK12源码页面
点击左侧导航栏中的zip超链接,等待下载完成后会得到压缩包,自行解压即可。

4、编译过程

根据源码中doc/building.html文档的指示,按照以下步骤可完成最简单的编译。

4.1 Run configure

在源码根目录执行下列命令:

bash configure

这个命令在执行过程中会去校验是否安装了编译所需要的所有元素,如果少了某个库,命令就会执行失败,同时在命令行中打印安装该库的命令,各位按照提示安装即可,最后执行成功会打印如下图的信息:
bash configure截图
命令执行完毕后,会在build文件夹下生成对应的文件,如图:
命令执行结果截图

4.2 Run make

执行完4.1的命令后,同样在源码根目录执行下列命令:

make images

书作者启动了4条编译线程,8GB内存,全量编译大概用了15分钟,不过我编译的时候貌似挺快的,还是得看各位的机子性能吧。

4.3 验证结果

命令执行完后,进入到目录“/jdk12/build/linux-x86_64-server-fastdebug/jdk/bin”下面,其中linux-x86_64-server-fastdebug为命令bash configure生成的文件夹,请自行替换,进入目录后,执行如下命令:

./java -version

得到如下截图的界面:
编译结果截图
表明jdk编译成功。

4.4 其他

本文对命令具体参数并未进行讲解,想要了解的可以直接看《深入理解Java虚拟机》一书,咱也不能真的全部都抄书是吧,想更深入理解的,直接看文档building.html也可以,讲的很详细,就是全都是英文的,不好看懂。

5、在CLion中调试

5.1 下载CLion

访问JetBrains官网下载CLion,这边可以下载最新的,也可以下载老版本的,我因为新版本的CLion导入项目的选项跟书中截图不太一样,所以特意下了2019.3的版本,在点击超链接后,再点击下图红框部分的Other version即可选择版本:
CLion下载地址

5.2 启动CLion

下载完成后会得到一个压缩包,自行解压完毕,进入目录“/clion-2019.3.6/bin”,执行如下命令启动CLion:

./clion.sh

5.3 导入项目

启动CLion后会进入如下界面:
CLion启动界面
注:黑色的图片会有很明显的CSDN的水印,我没找到怎么去,各位将就着看一下。
选择第二项“New CMake Project from Sources”,在打开的弹窗中选择jdk12文件夹,点击ok导入工程,进入如下界面:
导入界面

这里我看了好多博客,都表示这一步直接默认点击OK即可,但是我这么做后,在后续步骤中找不到我所编译生成的jdk12的可执行文件,所以这边大家把下图中的bin文件夹勾选上:
勾选界面
点击ok,进入工程,CLion会自动生成文件CMakeLists.txt,这个文件是用来编译工程的,我们暂时不需要这个,进入工程后会有一个编译报错,不要管它,在CLion右上角找到下图的选项,点击Edit Configurations:
Edit Configurations
在Run/Debug Configurations界面里有个默认的jdk12的CMake Application,我们新建一个CMake Application:

  • 点击左上角那个加号,选择新建CMake Application
  • 在右边填写Name,叫啥都行
  • Executable选择我们编译生成的可执行文件java,地址为“jdk12/build/linux-x86_64-server-fastdebug/jdk/bin/java”
  • Program arguments处填写“-version”
  • 选择Build进行删除

Configurations
这里面也踩了次坑,书中说要删除Build,但是这个Build它太小了,当时我没看到,结果每次Debug的时候都默认进行编译,然后自然就是编译失败了。
新建完CMake Application后,点击OK,回到工程页面,做下Debug测试:

  • 首先找到java.c文件,目录为“jdk12/src/java.base/share/native/libjli/”
  • 在java.c文件中找到JavaMain函数
  • 在JavaMain函数第一行代码处打上断点
  • 启动Debug,注意要选择刚才新建的CMake Application

如果成功的话,程序会停在JavaMain的第一行,并且会传入一个“-version”的参数,如下图:
Debug截图
点击继续运行,最后输出如图:
Debug结果截图
表明使用CLion调试JDK源码初步成功

6、写在后面

一开始觉得这个第一章的实验很简单,做起来到处是坑,一会儿源码少文件,一会儿这边操作出问题,希望本博客能让大家少踩点坑吧。

标签:JDK,命令,抄书,apt,编译,源码,install,CLion
来源: https://blog.csdn.net/Stone__Fly/article/details/117266349

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有