设为首页 收藏本站
查看: 1283|回复: 0

[经验分享] JVM(一) OpenJDK1.8源码在Ubuntu16.04下的编译

[复制链接]

尚未签到

发表于 2017-11-23 10:10:50 | 显示全部楼层 |阅读模式
  笔者最近在学习周志明老师编写的《深入理解Java虚拟机》一书,书中第一章的实战部分就是“自己编译JDK”,不过书中提到的是OpenJDK 7的编译。由于现在Java开发主流的JDK基本都是1.8的版本,所以,笔者就进行了OpenJDK 8的编译。
  (本文为博主原创文章,转载请注明出处)
  一、环境准备
  1. 操作系统
  笔者用的是Ubuntu 16.04.2 LTS (GNU/Linux 4.8.0-36-generic x86_64),当然其他debian的Linux操作系统,理论上也可以;
  2. 安装Bootstrap JDK
  由于我们编译的是OpenJDK 8,所以,Bootstrap JDK最好采用OpenJDK 1.7版本的,笔者安装的是



java version "1.7.0_95"
OpenJDK Runtime Environment (IcedTea 2.6.4) (7u95-2.6.4-3)
OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)
  在Ubuntu下安装OpenJDK7的方法很简单
  直接运行如下命令:



sudo apt-get install openjdk-7-jre
sudo apt-get install openjdk-7-jdk
  如果出现“没有可用的软件包 openjdk-7-jdk,但是它被其它的软件包引用了。这可能意味着这个缺失的软件包可能已被废弃, 或者只能在其他发布源中找到,E: 软件包 openjdk-7-jdk 没有可安装候选”,可以按照一下操作安装1.7.X版本



sudo add-apt-repository ppa:openjdk-r/ppa  
sudo apt-get update   
sudo apt-get install openjdk-7-jre
sudo apt-get install openjdk-7-jdk
  3. 下载OpenJDK 8的源码下载
  笔者尝试从官网下载,但是,奈何没找到下载的地方(找到的相关链接上都无法下载了,只能通过hg从代码库check out,但是,这样太费时,因为代码库在国外),于是最后在CSDN上有人提供了源码的下载,如果你不想再去费力气找源码,我提供一个百度网盘的链接,有需要的同学可以去下载。
  链接:http://pan.baidu.com/s/1hr9IV3m
  密码:2vb5
  4. 相关依赖包的安装
  由于JDK在编译的过程中会依赖一些外部的包,所以,最好是编译前就装好。当然,如果你没有在编译前装好,在你运行./configure的时候,这个脚本会进行环境的检查,当检查到失败的时候,缺什么再安装什么也可以,不过就是费时间些。
  以下是我在安装过程中发现缺少并安装的包,仅供参考,可能不同的OS缺少的包可能不一样:



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
  二、编译
  好的,现在编译JDK的环境已经准备好了,咱们可以开始进行编译了。
  1. 将OpenJDK 8的源码包上传到OS的任意目录
  2. 进入OpenJDK 8的根目录



lxy@ubuntu:openjdk$ ls
a.out               build   configure  get_source.sh  jaxp   jdk        LICENSE  Makefile  README              test
ASSEMBLY_EXCEPTION  common  corba      hotspot        jaxws  langtools  make     nashorn   README-builds.html  THIRD_PARTY_README
  3. 运行根目录下的configure脚本



lxy@ubuntu:openjdk$ bash configure
Running generated-configure.sh
configure: Configuration created at Wed Sep  6 05:49:02 PDT 2017.
configure: configure script generated at timestamp 1416326200.
checking for basename... /usr/bin/basename
checking for bash... /bin/bash
checking for cat... /bin/cat
checking for chmod... /bin/chmod
..............................  省略
====================================================
A new configuration has been successfully created in
/home/lxy/jdk-src/openjdk/build/linux-x86_64-normal-server-release
using default settings.
Configuration summary:
* Debug level:    release
* JDK variant:    normal
* JVM variants:   server
* OpenJDK target: OS: linux, CPU architecture: x86, address length: 64
Tools summary:
* Boot JDK:       java version "1.7.0_95" OpenJDK Runtime Environment (IcedTea 2.6.4) (7u95-2.6.4-3) OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)  (at /usr/lib/jvm/java-7-openjdk-amd64)
* C Compiler:     gcc-5 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 version 20160609 (at /usr/bin/gcc-5)
* C++ Compiler:   g++-5 (Ubuntu 5.4.0-6ubuntu1~16.04.4) 5.4.0 version 20160609 (at /usr/bin/g++-5)
Build performance summary:
* Cores to use:   1
* Memory limit:   1981 MB
* ccache status:  not installed (consider installing)
  4. 运行make all
  如果在一切顺利,在大概40分钟之后,JDK的整个编译会完成,你将会看到如下的消息。



----- Build times -------
Start 2017-09-05 09:13:03
End   2017-09-05 09:49:47
00:01:05 corba
00:01:10 demos
00:05:09 docs
00:16:08 hotspot
00:01:48 images
00:00:36 jaxp
00:00:52 jaxws
00:09:23 jdk
00:00:00 langtools
00:00:32 nashorn
00:36:44 TOTAL
-------------------------
  5. 验证编译之后JDK
  编译之后的JDK可执行文件都保存在JDK根目录的build/linux-x86_64-normal-server-release目录下,进入到到目录./build/linux-x86_64-normal-server-release/jdk/bin
  运行如下命令



lxy@ubuntu:bin$ ./java -version
openjdk version "1.8.0-internal"
OpenJDK Runtime Environment (build 1.8.0-internal-lxy_2017_09_05_08_49-b00)
OpenJDK 64-Bit Server VM (build 25.40-b25, mixed mode)
  那么恭喜你了,你的JDK成功编译,且能运行了,当然,你还可以写个简单的Java hello world运行一下 ^~^。
  三、遇到的问题以及解决方法
  1. 在运行bash ./configure时,遇到了类似如下的错误
DSC0000.png

  正如我在“环境准备”那里提到的,根据提示安装相关包即可;
  2. 运行make all时遇到操作系统不支持的错误
  如图:
DSC0001.png

  从错误中容易看出,应该是内核版本和JDK要求的内核版本不一致造成的。根据错误,找到对应的Makefile(




/home/lxy/jdk-src/openjdk/hotspot/make/linux/Makefile)文件,259行

DSC0002.png

  从这里看到,由于我当前的内涵是4开头的,所以在此处报错。我的解决方法是,直接把这里的SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3%改成了SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3% 4%,即添加了对4开头的版本的支持。修改之后再运行make all之后便没有再出现报错了。
  四、总结
  整个OpenJDK 8的编译过程中,比笔者想象的要简单很多。如果有些不对或者有问题的地方,欢迎提出来一起讨论。
  参考:
  README-builds.html  --> 此文档是OpenJDK源码中自带的,比较全面
  http://blog.csdn.net/u010856630/article/details/51660012
  《深入理解Java虚拟机》

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-409788-1-1.html 上篇帖子: zabbix上监控docker 下篇帖子: 为什么多线程读写 shared_ptr 要加锁?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表