首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >linux编译openjdk8

linux编译openjdk8

作者头像
yaphetsfang
发布2020-08-05 22:56:12
1.7K0
发布2020-08-05 22:56:12
举报
文章被收录于专栏:yaphetsfangyaphetsfang

最近在看《深入理解java虚拟机》,第一章主要讲java历史,有点意思的是编译openjdk,想自己试着搞搞,但是书上编译的是7,而且要配置一堆的配置文件,就上网查查,openjdk8貌似不用配置这么多,就试着编译8。纪录一下操作过程。

**

编译

**

系统:centOs 7.5 64位(刚开始用的腾讯云1核1g,编译的时候说内存不够,好在腾讯云5天免费退,改成1核2g) 1、下载openjdk8:https://pan.baidu.com/s/1pLSMpAj 2、上传到服务器/usr/openjdk 3、下载的压缩包是7z的,所以要先安装7z工具

yum install p7zip
7za x openjdk-8u40-src-b25-10_feb_2015.7z

然后网上一些7z解压命令 7z x filename会出现7z: command not found错误。 可以参考链接:https://blog.csdn.net/yu_yuan_1314/article/details/11999995

4、安装jdk,编译需要一个引导jdk,网上都说要比openjdk的版本低一个,我也不知道为什么,就依葫芦画瓢,下了1.7u80.

cd /usr/java
tar -zxvf jdk-7u80-linux-x64.tar.gz
vi  /etc/profile
//在打开的文件末尾添加如下内容:
export JAVA_HOME=/usr/java/jdk1.7.0_80
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
source /etc/profile    #使配置文件立即生效

5、安装编译用的工具,我安装如下工具之后就可以正常编译了,没有网上说的configure出现未安装的依赖。大家有的话可以再安装缺少的。

yum groupinstall "Development Tools"
yum install libXtst-devel libXt-devel libXrender-devel
yum install cups-devel
yum install freetype-devel
yum install alsa-lib-devel
yum install ccache

6、开始编译

cd /usr/openjdk/openjdk-8u40-src-b25-10_feb_2015/openjdk
bash ./configure --with-target-bits=64 --with-boot-jdk=/usr/java/jdk1.7.0_80/ --with-debug-level=slowdebug --enable-debug-symbols ZIP_DEBUGINFO_FILES=0
make all ZIP_DEBUGINFO_FILES=0

其中configure成功会出现如下截图

在这里插入图片描述
在这里插入图片描述

此处说明下上面configure用到的参数作用: –with-target-bits=64 :指定生成64位jdk; –with-boot-jdk=/usr/java/jdk1.7.0_80/:启动jdk的路径; –with-debug-level=slowdebug:编译时debug的级别,有release, fastdebug, slowdebug 三种级别; –enable-debug-symbols ZIP_DEBUGINFO_FILES=0:生成调试的符号信息,并且不压缩;

make成功之后会出现如下截图:但是我没有出现网上说的编译1个多小时的情况

在这里插入图片描述
在这里插入图片描述
cd /usr/openjdk/openjdk-8u40-src-b25-10_feb_2015/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin 
./java -version
//出现如下截图
在这里插入图片描述
在这里插入图片描述

至此,编译工作完成,但是还没有做运行,调试工作。 参考链接: https://www.linuxidc.com/Linux/2017-06/144713.htm http://www.voidcn.com/article/p-zkxeqkor-bkg.html https://blog.csdn.net/hxm_Code/article/details/77417709

运行调试

因为我的linux是云服务器,不太方便调试,想着能不能把编译好的代码放到我的本地windows下运行调试,但是我估计是不行的。猜测理由:1、jdk包含jre,都要分成不同系统下载。2、/usr/openjdk/openjdk-8u40-src-b25-10_feb_2015/openjdk/hotspot/make 这个路径下有不同的操作系统的makefile,以及特定的脚本,应该是按照操作系统来采用不同的配置来生成虚拟机。3、虚拟机是为了屏蔽操作系统的带来的环境不一致,但是在调用native方法的时候还是要适应系统的吧。

20180920更新 可能是我执行的方法不对或者怎么样,总之在windows下执行不起来,其次网上运行调试的文章有些语焉不详,netbeans失败了,还是学着使用gdb吧。

抽时间粗略的学习了一下怎么用gdb。 命令参考链接:https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/gdb.html#cgdb http://man.linuxde.net/gdb

首先在/usr/openjdk/openjdk-8u40-src-b25-10_feb_2015/openjdk/build/linux-x86_64-normal-server-slowdebug/jdk/bin 路径下写一个简单java文件

public class Test{
	public static void main(String[] args){
		System.out.println("hello world");
	}
}

在当前路径下 ./javac Test.java,编译一下文件,这是用openjdk编译出来的jdk来编译java文件 然后执行以下命令

gdb --args ./java Test //设置之后run命令要执行的具体命令,但是我没试出来怎么在run后面加
b /usr/openjdk/openjdk-8u40-src-b25-10_feb_2015/openjdk/jdk/src/share/bin/main.c:95 //在main.c文件的95行打断点
run  //然后会在前面端点处停下来
n //执行下一步
在这里插入图片描述
在这里插入图片描述

这样子是不是和平时在ide上debug感觉不一样,可以打命令 layout。下图是不是就感觉好多了。

在这里插入图片描述
在这里插入图片描述

然后为什么在main.c上打断点,我看过一些文章是在openjdk/hotspot/src/share/tools/launcher/java.c上打断点,但是openjdk8之后虚拟机入口改变了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-08-03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 编译
  • 运行调试
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档