Ubuntu如何轻松编译openJDK详解
前言
花了三天在windows上搞openjdk,对bash本来就不熟,加上各种莫名依赖和脚本里的bug,身心俱疲。最后make all的时候产生一个莫名其妙的错误说什么有warning且-werror置为了true,死活没google到-werror是什么鬼,只好作罢了。
今天本菜鸟突然想起来,朕还有ubuntu虚拟机,权且一试,没想到轻松成功。
平台:ubuntu version 5.1.30 (3.2.0-98-generic-pae #138-ubuntu smp mon jan 11 13:11:12 utc 2016 i686 i686 i386 gnu/linux)
步骤1:(按照《深入理解java虚拟机》中的命令)一键下载依赖
sudo apt-get install build-essential gawk m4 libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev binutils libmotif3 libmotif-dev ant
这里写的不一定全,不过暂且先装着,后面如果缺少什么依赖可以再按提示安装,一个佛系程序员的一天就是见招拆招。
openjdk的源代码有c++也有java,所以需要一个bootstrap jdk去编译java的部分。这个jdk通常是比你要编译的openjdk早一个版本的官方jdk,这是官方的readme-builds(在第二步中下载下来的源码根目录下)说的:
...the general rule is that the bootstrap jdk must be an instance of the previous major release of the jdk.
每一个版本的readme-builds中都会指明这一版的openjdk需要的bootstrap jdk具体版本,比如openjdk8需要的是jdk7u7以上的版本,但不能是jdk8:
步骤2:下载源码
sudo hg clone http://hg.openjdk.java.net/jdk8u/jdk8u-dev/ cd jdk8u-dev chmod 755 get_source.sh ./get_source.sh
用mercurial下载jdk8u的最新源码。小伙伴如果想下载其它版本的源码可以去这里browse: http://hg.openjdk.java.net/。这个下载过程大约三十分钟。
如果不想用mercurial,也可以在这里下载zip包:http://jdk.java.net/java-se-ri/8 (在网页偏下方ri source code那里):
我在windows上编译是就是用这个zip包解压编译的,最后失败了。出于迷信心理,在ubuntu上我还是决定用mercurial下载,各路大神尽可不必理会。
步骤3:设置环境变量新建一个setup.sh,把以下的内容拷贝进去:
export lang=c #bootstrap-jdk的安装路径,替换为自己bootstrap-jdk的路径 export alt_bootdir=/usr/lib/jvm/java-7-oracle-1.7.0.80 export allow_downloads=true export hotspot_build_jobs=8 export skip_compare_images=true #要编译的内容,读者可以根据需要自行选择 export build_langtools=true #export build_jaxws=false #export build_jaxp=false #export build_corba=false export build_hotspot=true export build_jdk=true export skip_compare_images=true build_deploy=false build_install=false #编译结果存放的路径,建议存放在openjdk源码中build文件夹 export alt_outputdir=/usr/dev/jvm/openjdk/build #这两个环境变量需要去掉,不然会出问题 unset java_home unset classpath
运行
./setup.sh
设置一遍就好。
步骤4:进行编译
到下好的openjdk源码的根目录下运行make,大概需要二三十分钟。本来是应该运行make sanity的,但是我又碰到了这个错误……
妈哟什么鬼,搜了一会无甚结果,于是鸡贼的跳过了这一步直接运行make,竟然成功了,成功后的输出长这样:
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对的支持。
推荐阅读
-
Ubuntu 17.04系统下源码编译安装opencv的步骤详解
-
JVM-Ubuntu18.04.1下编译OpenJDK8
-
Ubuntu下如何创建XFS文件系统的LVM详解
-
详解如何使用babel进行es6文件的编译
-
ES6中的class是如何实现的(附Babel编译的ES5代码详解)
-
详解Webpack如何引入CDN链接来优化编译后的体积
-
ubuntu 16.04安装redis的两种方式教程详解(apt和编译方式)
-
详解如何在Ubuntu 16.04上增加Swap分区
-
在Ubuntu中如何查看网络路由表详解
-
如何安装win10和ubuntu14双系统 图文详解win10和ubuntu14双系统安装过程