目录
一、下载源码
可选择在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-build(https://github.com/AdoptOpenJDK/openjdk-build),官网的介绍是执行一条命令./makejdk-any-platform.sh jdk8u 即可完成编译,笔者因为公司网络管制无法在Linux虚机上访问Github,有兴趣的同学可尝试。
二、编译
在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,正常输出则编译成功,如下图:
JAVA虚拟机学习笔记(一)Windows10下编译OpenJDK8
三、搭建开发环境
因为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、点击执行,按照默认选项一直点下一步直到下图:
一开始