最近打算研究一下 jvm 相关的知识,所以想编译 OpenJDK 的源码,一直在Mac上面编译,但是总是出现莫名其妙的error,还找不到有效的解决方式,所以还是进入 Ubuntu 下面进行编译,虽然中间也出现一个问题,但是很快找到了解决方案,大概总共用了 6 分钟左右就编译了 OpenJDK8 的源码,下面记录一下实践过程,仅供参考!

相关环境

  1. Ubuntu16.04
  2. OpenJDK8.0源码
  3. oraclejdk1.7.0.80

上面便是本次的编译环境,Ubuntu 是我在 Mac 下面用 virtualbox 创建的,当然也可使用真正的 Ubuntu 环境。

  • 下载 OpenJDK8.0 源码

首先我们得下载 OpenJDK8.0 的源码,一种方式是通过 hg 来下载,这种方式取决于网络速度,很慢很慢,有的时候还会停止,还有一种方式就是直接下载源码的压缩包,这里我们使用第二种方式 openjdk-8u40-src-b25-10_feb_2015.7z ,下载后我们把它解压到一个目录下面。

  • 安装部分依赖包
sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev
sudo apt-get install libcups2-dev
sudo apt-get install libfreetype6-dev
sudo apt-get install libasound2-dev复制代码
  • 编译前检查

我们进入刚刚解压后的 OpenJDK8.0 根目录,输入以下命令:

bash configure复制代码

当出现以下内容时就可以进行编译了

  • 开始编译
sudo  make复制代码

等待大概 7~8 分钟就有就能编译好了。

  • 问题解决

如果出现以上的 error 的话,到
/openjdk/build/linux-x86_64-normal-server-release/下面,找到 Makefile 这个文件,打开它,找到下面这几行代码

SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3% 4%
OS_VERSION := $(shell uname -r)
EMPTY_IF_NOT_SUPPORTED = $(filter $(SUPPORTED_OS_VERSION),$(OS_VERSION))复制代码

SUPPORTED_OS_VERSION 后面增加 4%,然后保存退出,重新执行编译命令。

  • 结果校验

当我们编译成功后,我们得检验一下结果如何,进入到下面这个目录下面

/openjdk/build/linux-x86_64-normal-server-release/jdk/bin复制代码

在 bin 目录下面,执行

./java -version复制代码

正常情况下,我们编译后的 openjdk ,会带有我们用户名的,如下所示

而我们本机一开始安装的 jdk 则是

通过以上几个步骤,我们便完成了OpenJDK8的编译。

  • eclipse调试

我们首先下载 Eclipse IDE for C/C++ Developers 这个版本的 eclipse ,这个版本可以到官网去查找然后下载。我们打开 eclipse 后,选择 import ,依次选择 C/C++ 下面的 Existing Code as makefile Project 内容

点击 next ,进入到下个页面,选择 Linux GCC ,然后导入编译的 OpenJDK8 的工程即可。

工程目录。


关于作者

github: github.com/crazyandcod…
博客: crazyandcoder.github.io
掘金:juejin.im/user/56b96a…

ubuntu编译并调试OpenJDK8源码实践相关推荐

  1. ubuntu 环境下调试mysql源码_【转】Ubuntu 16.04下 Mysql 5.7.17源码编译与安装

    Ubuntu 16.04下 Mysql5.7.17源码编译与安装 系统环境 一. 系统安装条件 1.cmake MySQL使用cmake跨平台工具预编译源码,用于设置mysql的编译参数. sudo ...

  2. ubuntu编译内核_鸿蒙源码下载并编译

    第一章 下载源码并编译 1.1 在Ubuntu中安装开发环境 如果你是从头看文档,并且按照文档操作,那么你已经按照<5.2 安装Ubuntu软件>下载并运行了这个脚本:Configurin ...

  3. ubuntu 环境下调试mysql源码_Linux中eclipse调试mysql源代码

    Linux中eclipse调试mysql源代码 系统:Redhat Linux 6.4 准备的包: eclipse-cpp-luna-SR1-linux-gtk-x86_64 .tar.gz cmak ...

  4. android6.0单独编译和调试framework源码的方法

    缺省情况下,android 6.0的编译过程会优化framework.jar,这导致所有系统启动相关的文件(比如service.jar)一起打包到boot.oat中打包,并引入了checksum机制, ...

  5. WSL Ubuntu 20.04下Android源码编译与导入Android Studio

    源码下载见前文:WSL Ubuntu 20.04下Android源码下载 idegen 模块编译 在development/tools/idegen/README下可以看到关于 idegen 工具的相 ...

  6. Ubuntu 12.04(64位)下载并编译 Android 4.1 源码[只有2条命令]

    2019独角兽企业重金招聘Python工程师标准>>> Ubuntu 12.04(64位)下载并编译 Android 4.1 源码[只有2条命令] ================= ...

  7. Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决

    Ubuntu12.04编译Android4.0.1源码全过程-----附wubi安装ubuntu编译android源码硬盘空间不够的问题解决 参考文章: (1)Ubuntu12.04编译Android ...

  8. 自己动手编译Android 8.0源码

    转载自:http://blog.csdn.net/dl6655/article/details/78869501 安装git并且配置 sudo apt-get install git git conf ...

  9. 跟踪调试JDK源码时遇到的问题及解决方法

    目录 问题描述 解决思路 在IntelliJ IDEA中调试JDK源码 在eclipse中调试JDK源码 总结 问题描述 最近在研究MyBatis的缓存机制,需要回顾一下HashMap的实现原理.于是 ...

最新文章

  1. 在Visual C++下搭建OpenGL的开发环境
  2. Programming asp.net笔记--第三章 Controls: Fundamental Concepts
  3. Oracle 小技巧
  4. Android Kotlin 协程async
  5. 【学生信息管理系统】——问题篇
  6. mysql本地连接错误解决办法
  7. 一道c++小编程题,
  8. 【转】基于Ubuntu 14.04 LTS编译Android4.4.2源代码
  9. C++ 构造函数中抛出异常
  10. 使用AsyncTask类实现简单的异步处理操作
  11. html5游戏怎么做apk,如何把h5app打包成移动apk
  12. 国产管理软件勒索病毒大爆发
  13. 绿色版飞信2008 启动时报错“无法注册类别...”的解决办法
  14. 高薪利器:四大热门云计算认证推荐
  15. 一文看懂:全球半导体供应链分类汇总
  16. LncRNA与代谢组联合分析
  17. 爬山法、随机重启爬山法、模拟退火算法对八皇后问题和八数码问题的性能测试...
  18. C++画图 => 蓝桥杯青少组C++ => 信奥 学习路线图
  19. ACK和Ack的区别
  20. 你真的了解IP地址吗?

热门文章

  1. Docker Compose安装Registry后配置WebUI与客户端
  2. DataTables怎样取消黑白行
  3. SpringBoot+MyBatisPlus+Swagger2.7规范开发接口流程(以废料包材入库与出库为例)
  4. POI实现Excel导入时提示NoSuchMethodError: org.apache.poi.util.POILogger.log
  5. 素数的判断,以及素数的遍历
  6. erp二次开发有出路吗_ERP的真正技术瓶颈:详细生产排程!
  7. 报告解读丨细数万亿企服市场发展史,行业发展新趋势
  8. 通过bootstrap来学习less
  9. CserialPort类的简单用法
  10. 错误:无法访问android.app.Activity 找不到android.app.Activity的类文件