Ubuntu快速搭建单步调试openjdk环境
2022/8/13 5:23:32
本文主要是介绍Ubuntu快速搭建单步调试openjdk环境,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
版本 | |
---|---|
操作系统 | Ubuntu 20.04.2 LTS |
编译的jdk | jdk8 |
boot jdk | jdk7 |
看源码的工具 | Clion |
安装引导 JDK。 所有 OpenJDK 构建都需要访问以前发布的 JDK,称为引导 JDK。 一般规则是引导 JDK 必须是 JDK 先前主要版本的实例。
比如,构建JDK 8需要使用更新为7或更高版本的JDK 7版本。
JDK 8开发人员不应使用JDK 8作为引导JDK,以确保使用JDK 7构建的系统部分不会引入JDK 8依赖项。摘自 http://hg.openjdk.java.net/jdk8/jdk8/raw-file/tip/README-builds.html#setup
一、准备源码环境一条龙
1.1 下载要编译的源码
git clone https://github.com/AdoptOpenJDK/openjdk-jdk8u
如果 GitHub 下载太慢也可以选择 Gitee 镜像,我把 openjdk 源码放在 ~/CLionProjects
文件夹下:
[email protected]:~$ cd ~/CLionProjects
[email protected]:~/CLionProjects$ git clone -b jdk8-b120 https://gitee.com/mirrors/openjdk.git
1.2 下载和解压jdk7
我选择把 jdk 安装在
/opt/lib/jdk
文件夹,你可以选择直接安装在~
即用户文件夹下。
[email protected]:~$ cd /opt/lib/jdk
[email protected]:/opt/lib/jdk$ sudo wget https://repo.huaweicloud.com/java/jdk/7u80-b15/jdk-7u80-linux-x64.tar.gz
[email protected]:/opt/lib/jdk$ sudo tar -zxvf jdk-7u80-linux-x64.tar.gz
[email protected]:/opt/lib/jdk$ sudo mv jdk1.7.0_80/ jdk7/
1.3 配置环境变量
[email protected]:~$ vim ~/.bashrc
在文件末尾追加以下内容:
export JAVA_HOME=/opt/lib/jdk/jdk7 export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar export PATH=$JAVA_HOME/bin:$ANT_HOME/bin:$PATH
保存并退出,然后执行:
[email protected]:~$ source ~/.bashrc
1.4 安装依赖
[email protected]:~$ sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev libcups2-dev libfreetype6-dev libasound2-dev ccache
编译的时候需要用到
1.5 configure & make
[email protected]:~$ cd ~/CLionProjects/openjdk
[email protected]:~/CLionProjects/openjdk$ ls -al | grep configure
-rw-r--r-- 1 csdn sudo 1235 8月 12 09:05 configure
因为,默认情况下configure不是可执行文件,执行命令为文件所有者增加可执行权限
[email protected]:~/CLionProjects/openjdk$ chmod u+x configure
[email protected]:~/CLionProjects/openjdk$ ls -al | grep configure
-rwxr--r-- 1 csdn sudo 1235 8月 12 09:05 configure
[email protected]:~/CLionProjects/openjdk$ sudo ./configure --with-target-bits=64 --with-boot-jdk=/opt/lib/jdk/jdk7 --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FILES=0
看到以下这个画面就证明配置成功了,就可以编译了。如果不是,就得一步步把问题解决了再重新配置
我尝试用 gcc-9 版本编译,结果有很多我无法解决的编译问题,所以我还是把版本降到了 gcc-5 如需要了解《Ubuntu20.04 使用apt安装gcc-5》点击此处
如果切换了 gcc,你也需要重新执行上面的 ./configure ... 操作,同时建议执行一个 make clean 再进行 make all
[email protected]:~/CLionProjects/openjdk$ sudo make all DISABLE_HOTSPOT_OS_VERSION_CHECK=OK ZIP_DEBUGINFO_FILES=0 WARNINGS_ARE_ERRORS=-Wno-all
首次编译经过漫长的时间之后,出现下图,恭喜你编译成功了!
1.6 关于 readdir_r is deprecated 问题
error: ‘int readdir_r(DIR*, dirent*, dirent**)’ is deprecated [-Werror=deprecated-declarations]
以下摘自《JVM-Ubuntu18.04.1下编译OpenJDK8》:
查阅网上资料说是这是因为 glibc >= 2.24 的情况下,方法 readdir_r is deprecated,不支持了,通过
getconf GNU_LIBC_VERSION
检查发现 Ubuntu 20.04.4 LTS 版本为 glibc 2.31,而且也有很多人在OpenJDK上报了BUG,链接 https://bugs.openjdk.java.net/browse/JDK-8179887,6/7/8/9都不打算修复此问题,会在11修复这个BUG,所以当前只能通过其他的方式来解决,解决方案如下:在 ./hotspot/make/linux/makefiles/gcc.make文件中找到 WARNINGS_ARE_ERRORS=-Werro,注释该段或改成
WARNINGS_ARE_ERRORS=-Wno-all
。再编译就会忽略掉警告,直到编译完成。
当然,我是选择直接把这个选项追加到 make all 命令的末尾。
二、CLion单步调试
CLion这个IDE不支持Makefile,仅支持cmake,比较麻烦。因此可以在项目目录 /home/geekziyu/CLionProjects/openjdk 中添加一个 CMakeLists.txt 文件,下面仅供参考:
cmake_minimum_required(VERSION 3.16) project(hotspot8) file(GLOB_RECURSE SOURCE_FILES "*.cpp" "*.hpp" "*.c" "*.h") include_directories("/home/geekziyu/CLionProjects/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/include/") include_directories("/home/geekziyu/CLionProjects/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/include/linux") include_directories("/home/geekziyu/CLionProjects/openjdk/hotspot/src/share/vm/prims") include_directories("/home/geekziyu/CLionProjects/openjdk/hotspot/src/share/vm") include_directories("/home/geekziyu/CLionProjects/openjdk/hotspot/src/share/vm/precompiled") include_directories("/home/geekziyu/CLionProjects/openjdk/hotspot/src/share/vm/runtime") include_directories("/home/geekziyu/CLionProjects/openjdk/hotspot/src/share/vm/utilities") include_directories("/home/geekziyu/CLionProjects/openjdk/hotspot/src/share/vm/classfile") include_directories("/home/geekziyu/CLionProjects/openjdk/hotspot/src/share/vm/oops") include_directories("/home/geekziyu/CLionProjects/openjdk/jdk/src/solaris/bin") include_directories("/home/geekziyu/CLionProjects/openjdk/hotspot/src/cpu/x86/vm") include_directories("/home/geekziyu/CLionProjects/openjdk/hotspot/src/share/vm/interpreter") add_executable(hotspot8 ${SOURCE_FILES})
接着,从顶部菜单栏找到 Run | Edit Configurations... 点击后打开 Run/Debug Configurations 对话框
点击左上角 +
添加 CMake Application
- Target 这个不重要,我选择了 All Targets
- Executable 选择编译后的源码中的 java 程序,我的路径为 /home/geekziyu/CLionProjects/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin/java
- Program arguments 如下所示,注意替换编译后的 Java class文件路径和待启动的 Class类名
-XX:-PrintInterpreter -XX:-UseTLAB -XX:-TraceBytecodes -Xms10m -Xmx10m -XX:-UseTLAB -XX:+UseG1GC -XX:-UseConcMarkSweepGC -XX:-PrintGCDetails -XX:-TraceBytecodes -cp "/home/geekziyu/IdeaProjects/helloworld/target/classes" com.example.Main
- Before Launch 中的 Build 被我移除了
参考文档
JVM专家教你快速搭建单步调试openjdk环境,最新版(值得收藏)
这篇关于Ubuntu快速搭建单步调试openjdk环境的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-21《鸿蒙HarmonyOS应用开发从入门到精通(第2版)》简介
- 2024-12-21后台管理系统开发教程:新手入门全指南
- 2024-12-21后台开发教程:新手入门及实战指南
- 2024-12-21后台综合解决方案教程:新手入门指南
- 2024-12-21接口模块封装教程:新手必备指南
- 2024-12-21请求动作封装教程:新手必看指南
- 2024-12-21RBAC的权限教程:从入门到实践
- 2024-12-21登录鉴权实战:新手入门教程
- 2024-12-21动态权限实战入门指南
- 2024-12-21功能权限实战:新手入门指南