OpenJDK8 编译,调试和目录结构

本文详细介绍了在Windows上使用Cygwin编译OpenJDK8的全过程,包括下载源码、配置编译环境、GDB调试以及目录结构解析。在Cygwin环境中安装GCC、GDB等工具,并通过Eclipse进行C++项目开发。同时,文章展示了如何使用GDB进行多线程调试,解决Segmentation fault问题,深入理解OpenJDK的启动流程和源码结构。
摘要由CSDN通过智能技术生成

目录

一、下载源码

二、编译

三、搭建开发环境

四、GDB调试

五、目录结构说明


一、下载源码

    可选择在OpenJDK(http://hg.openjdk.java.net/jdk8u)的官方代码仓库下载zip包,如下图所示:

    可选择命令行的方式,先执行sudo yum install Mercurial 安装类似git的仓库管理工具hg,然后执行hg clone http://hg.openjdk.java.net/jdk8u/jdk8u命令下载源代码中最外层的目录,最后执行sudo sh get_source.sh下载所有子目录如上图jdk,hotspot下的代码。

     这两种方式都是直接访问位于国外的官网,没有国内镜像,网速相当不稳定,容易下载失败。笔者后面在Githup上搜到一个由AdoptOpenJDK社区维护的镜像仓库(https://github.com/AdoptOpenJDK/openjdk-jdk8u),果断fork到自己的Github账号下,从Github上下载源码就快很多了,如下图:

      AdoptOpenJDK提供了一个一键构建工具openjdk-buildhttps://github.com/AdoptOpenJDK/openjdk-build),官网的介绍是执行一条命令./makejdk-any-platform.sh jdk8u 即可完成编译,笔者因为公司网络管制无法在Linux虚机上访问Github,有兴趣的同学可尝试。

     参考:OpenJDK8源码编译(Ubuntu 16.04)

                openJDK之如何下载各个版本的openJDK源码

二、编译

     在windows上编译强依赖微软的Visual Studio的C/C++编译器,执行./configue时会根据当前操作系统类型强校验编译器类型,支持的编译器如下图:

本身没有安装Visual Studio的都推荐在Linux上编译。具体步骤如下:

1、确保已安装1.7的JDK,OpenJDK源码中Java API相关的Java代码需要借助已安装的JDK编译。OpenJDK7需要通过Ant脚本构建,还需要安装Ant相关依赖并配置环境变量,OpenJDK8改成经典的C编译方式,更加方便快捷。

2、sudo unzip openjdk-jdk8u-master.zip,将源码zip包解压

3、sudo sh ./configure --with-target-bits=64 --with-boot-jdk=/export/servers/jdk1.7.0_71 --with-debug-level=slowdebug --disable-zip-debug-info,执行配置依赖检查,生成Makefile,各参数含义如下:

  • –with-target-bits=64 :指定生成64位jdk;
  • –with-boot-jdk=/usr/java/jdk1.7.0_80/:启动jdk的路径;
  • –with-debug-level=slowdebug:编译时debug的级别,有release, fastdebug, slowdebug 三种级别;
  • –disable-zip-debug-info:禁止压缩生成的调试符号信息,方便gdb调试获取当前正在执行的源代码和行号等调试信息;

其他选项和构建相关环境变量配置参考sudo sh ./configure --help的说明。检查完成会提示缺少的依赖包,大部分情况按照提示通过yum命令安装即可,如下图:

 笔者反复执行上述安装命令一直报错,最后Google发现configue执行过程会记录日志config.log,查看具体的报错信息发现并不是缺少Xrender.h而是在加载XTest.h过程中发现XInput.h不存在,如下图:

进一步Google该头文件属于 libXi-devel包,执行sudo yum install libXi-devel后再configue,检查通过,如下图:

4、sudo make all执行编译,这个过程快慢依赖机器的硬件了,笔者大概花了10分钟左右, 下面是二次编译完成的截图:

5、编译完成,会在根目录下生成build文件夹,保存构建的结果和相关脚本,进入保存java启动入口二进制文件的jdk/bin目录下,执行./java -version,正常输出则编译成功,如下图:

       参考:linux编译openjdk8

                 JAVA虚拟机学习笔记(一)Windows10下编译OpenJDK8 

                 make 和 make install 的区别

三、搭建开发环境

     因为C/C++本身不是严格的跨平台语言,所以最好保证开发环境跟编译环境一致,推荐使用Ubuntu桌面版Linux + Eclipse。不要使用Netbeans,不要使用Netbeans,不要使用Netbeans!!!刚开始笔者参考部分博客的引导使用Netbeans,Netbeans 8以上的新版本不支持C/C++,装上Netbeans 8 C/C++版查看OpenJDK源码就发现一堆莫名其妙的引用报错,找不到头文件,无法解析某个方法或者变量等,让人非常头大,最后放弃选择同样轻量级的IDE Eclipse。Eclipse C/C++开发通Java完全不同,也是不停磕磕碰碰。

     那么常见的不带桌面系统的CentOS可以安装Eclipse么?笔者尝试过,不行,因为Eclipse的UI界面强依赖操作系统本身的桌面系统支持,CentOS可以安装GNOME或者KDE等桌面系统,或者安装X Window System,借助其他已安装桌面系统的CentOS来显示界面也可以,总之就是得伤筋动骨。

    因为公司办公环境通常都是Windows,有没有办法在Windows上模拟Linux环境了?最简单粗暴的,在Window上借助Oracle VM VirtualBox安装一个虚拟机,在虚拟机内安装Ubuntu,前提是办公电脑配置高。还有一种比较省事的,远程开发,即代码开发在Windows上,IDE 通过sftp等方式将变动的代码同步远程Linux虚机上,利用远程Linux虚机的gcc/g++编译器编译调试代码,前提是能够直连这台Linux虚机并且有足够的权限,如今堡垒机盛行,这条路基本堵死了。最通用的解决办法是Cygwin或者MinGW,两者都是利用Windows本身的库函数来实现Linux上通用的GNU工具集合,如gcc编译器。MinGW是一种傻瓜式的按最低的标准配置安装,一键安装完成,安装包较小,但是缺乏灵活性,无法便捷安装其他依赖包。Cygwin在使用上相当于yum命令,提供上千种依赖供选择,并自动下载安装相关的依赖包,非常灵活,下面详细说明安装步骤:

1、到Cygwin官网(https://cygwin.com/install.html)下载最新的安装包,setup-x86_64.exe

2、点击执行,按照默认选项一直点下一步直到下图:

一开始

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值