深入理解JVM的爬坑之路--openjdk环境编译
Posted cherishsakura
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入理解JVM的爬坑之路--openjdk环境编译相关的知识,希望对你有一定的参考价值。
构建编译环境
起 在读本书时,为了更好的理解书上的源码,便开始了此段艰难的环境编译之路。
本文默认环境是Linux的Ubuntu 16.04 LTS,openJdk版本是14,书上给的网址直接下网速很坑,推荐在git上的地址下载
1. 安装基础环境
首先需安装GCC或CLang来进行编译,确保最低版本为GCC4.8 或者CLang 3.2 以上,安装GCC的命令为:
sudo apt-get install build-essential
编译过程中需要依赖FreeType,CUPS等若干第三方库,所依赖库在下列表格列出,执行对应安装命令即可。
工具 | 库名称 | 安装名称 |
---|---|---|
FreeType | The FreeType Project | sudo apt-get install libfreetype6-dev |
CUPS | Common UNIX Printing System | sudo apt-get install libcups2-dev |
X11 | X Window System | sudo apt-get install libx11-dev libxext-dev libxrender-dev libxrandr-dev libxtst-dev libxt-dev |
ALSA | Advanced Linux Sound Architecture | sudo apt-get install libasound2-dev |
libffi | Portable Foreign Function Interface Library | sudo apt-get install libffi-dev |
Autoconf | Extensible Package of M4 Macros | sudo apt-get install autoconf |
2. 安装JDK
编译jdk 需要安装N-1的已经编译好的JDk,安装过程如下,由于需要编译openjdk14u,所以需要安装一下jdk13,官网下载
下载完成后,使用如下命令解压:
tar -xvf jdk-13.0.2_linux-x64_bin.tar.gz
将解压后的文件夹移动到/opt 目录
sudo mv jdk-13.0.2 /opt/
配置Java环境:
sudo tee /etc/profile.d/jdk13.0.2.sh <<EOF
export JAVA_HOME=/opt/jdk-13.0.2
export PATH=$PATH:$JAVA_HOME/bin
EOF
导出配置文件并检查Java命令:
source /etc/profile.d/jdk13.0.2.sh
若不想每次都在用jdk的时候先source一下,可以配置永久环境变量
sudo gedit ~/.bashrc
然后在文件末尾添加 source /etc/profile.d/jdk13.0.2.sh
然后查看java版本
java -version
3. 开始编译
首先先生成bash configure命令
bash configure --enable-debug --with-jvm-variants=server // 编译FastDebug版,仅含Server模式的HotSpot虚拟机
configure 命令承担了依赖项检查、参数配置和构建输出目录结构等多项职责,如果编译过程中需要的工具链或者依赖项有缺失,命令执行后会得到明确的提示,并给出该依赖的安装命令。
完成后,执行
make all
注意,当目录结构产生后又修改了配置或者多次编译,必须先使用make clean和make dist-clean清理目录,才能确保新的配置生效。
4. 使用IDE调试源码
当然,作为一个标准型码农,只有能运行和跟踪调试程序才能是手握雷电,故而安装IDE来进行HotSpot源码调试。
本次使用的是 JetBrians的Clion,可直接在JetBrains官网下载,而且可以免费试用30天。
安装后,新建项目,选择”New CMake Project from Sources“ , 选择jdk14u下面的src/hotspot目录,然后点Ok,Clion会自动配置好CMake项目使用的CMakeLists.txt ,并且构建代码索引,符号表等。
加载后,添加一个新的configuration。如图
点击Configure Custom Build Targets,点击add
Name 设置成openjdk,点击Build 右边的 ... 图标,创建External Tools,
点击左上角+,创建tool,name填make,Program填make,Working directory 选择openjdk的代码目录路径,点击确定,保存。
然后在如下界面,选择创建好的target。Executable选择build出来的jdk的java文件,即路径为 jdk14u/build/linux-x86_64-server-fastdebug/jdk/bin/java。Program arguments 暂时填一个-version。最后保存。
然后运行debug
IDE代码中大量红色提示
在查看源码的cpp文件,会发现有很多红色的提示,且无法跳转,解决如下:
修改CMakeLists.txt ,加上如下的几行,然后Reload changes,即可有效解决。
include_directories(share)
include_directories(../java.base/unix/native/include)
include_directories(../java.base/share/native/include)
include_directories(../../build/linux-x86_64-server-fastdebug/jdk/include)
include_directories(../../build/linux-x86_64-server-fastdebug/hotspot/variant-server/gensrc)
include_directories(../../build/linux-x86_64-server-fastdebug/hotspot/variant-server/gensrc/jvmtifiles)
小结
深入理解Java虚拟机关于IDE编译有点泛,这边参考了 刘正阳大佬的 博客,本文后半部分的Clion 配置调试都参考于此篇博客,
虽然坎坷,但跌跌撞撞敲开了JVM的大门,抛砖引玉,还请各位大佬不吝赐教。
以上是关于深入理解JVM的爬坑之路--openjdk环境编译的主要内容,如果未能解决你的问题,请参考以下文章
vue的爬坑之路之----IOS:Safari不兼容Javascript中的Date问题