ubuntu18.04.2下编译openjdk9源码
最近在看《深入理解Java虚拟机 第二版》这本书,上面有关于自己编译OpenJDK源码的内容。自己根据书里的指示去操作,花了三天的时间,重装了好几次Ubuntu(还不知道快照这个功能,好傻一男的),在Ubuntu18.04.2上编译OpenJDK8源码都以失败告终。最后总结出书中关于这部分的内容已经过时了的结论,只能另外想办法。可能可以通过降低Ubuntu的版本(第三方下载旧的历史版本,官方不提供),但是我不愿意这么做,因为我的信条是过时的东西没必要重新捡起来了。最后决定编译OpenJDK9的源码,还好总算是成功了。
1.使用Mercurial下载openJDK9的源码。
Mercurial也是一种版本管理工具,和Git、SVN类似。
要使用Mercurial,先要安装Mercurial:
sudo apt install mercurial
然后就是创建下载OpenJDK9源码的目录:
cd ~
sudo mkdir ~/openJDK9SourceCode
cd /openJDK9SourceCode
然后就可以开始获取OpenJDK9的源码了:
hg clone http://hg.openjdk.java.net/jdk9/dev 9dev
cd 9dev
sh ./get_source.sh
如果网络不好的话,可能在第一行命令执行的时候就挂了。如果网络好的话,第一行命令执行非常快(废话)。这里的第三行则比较慢,大约需要30分钟。
2.安装openJDK8环境。
OpenJDK8可以通过官方的apt intall命令安装。为什么需要安装OpenJDK8呢,因为编译OpenJDK9源码需要OpenJDK8环境。网上都是说编译OpenJDK9源码需要低一个版本的OpenJDK9环境,具体是为什么,咱也不知道,咱也查不到,咱也不知道问谁。
安装OpenJDK8的命令:
sudo apt install openjdk--jdk-headless
耐心等待安装完成即可,环境变量也不用配,会自动帮你配好(没错,apt install就是那么好使)。
当然也可以采用离线安装的方式,具体怎么装我这里就不说了,百度【Ubuntu离线安装JDK9】一大堆教程。
要测试是否安装成功,可以在terminal终端键入查询Java版本的命令:
java -version
如果打印出Java版本的信息,则说明安装成功。
3.安装一些必要的工具包。
编译需要安装一些工具包:
apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev
apt-get install libcups2-dev
4.进行编译检查。
切换到OpenJDK9源码的目录的9dev目录下,使用bash命令进行编译检查:
bash configure --disable-warnings-as-errors --with-debug-level=slowdebug --with-native-debug-symbols=internal
然后这个命令编译检查的过程中会报错、中止并提示需要安装的工具包,按照提示安装工具包即可,安装完就重新执行上面编译检查的命令,反复几次,最后编译检查通过就可以进行编译了。
5.进行编译。
使用make命令进行编译,需要前面编译检查生成的配置文件:
make images
编译的过程很久,耐心等待即可。同时编译的过程会很耗费内存,尽量将虚拟机的内存调大,我是调到了3GB,一般来说2GB应该也是够的。
6.开始调试源代码。
使用gdb命令调试编译后的OpenJDK9源代码:
cd ~/openJDK9SourceCode/9dev/build/linux-x86_64-normal-server-slowdebug/jdk/bin
gdb -tui java
这样就可以愉快地与OpenJDK9的源码进行不可描述的游戏了。
"总是要走一些弯路,才能知道正确的路是什么。开发是这样,学习是这样,人生也是这样。"
最新文章
- SQL Server-聚焦过滤索引提高查询性能(十)
- jetty 9 嵌入式开发示例
- C#动态webservice调用接口 (JAVA,C#)
- 转 Windows server 2008 搭建VPN服务
- 基于int的Linux的经典系统调用实现
- mysql中自己定义函数编程
- Java注释模板
- Fatal error: Uncaught SoapFault exception
- centos扩容(pv,vg,lv)
- java类型转换详解(自动转换和强制转换)
- CSS3 2D、3D转换
- 获取DOM节点的几种方式
- BaseDao.util(虎大将军)
- 移动前端—H5实现图片先压缩再上传
- TP中的图片水印
- day18:正则表达式和re模块
- python模块分析之logging日志(四)
- poj1330-----------关于公共祖先的问题
- JAVA里的VO、BO、PO分别指什么?
- Django进阶之缓存和信号