这里纯粹自己弄着玩,因为以前没有成功过,这里记录一下,就是让遇到问题的人可以规避问题,快速编译自己的jdk。

相信很多学java的人都看过或者了解过一本书《深入理解java虚拟机》,里面就有介绍如何源码编译jdk。而且很多网上的编译都会将这本书里面的截图粘出来。

源码编译jdk,需要的环境如下:gcc,make,低版本的jdk,再就是源码本身了。

一、准备依赖库

所有的准备之前,需要先安装依赖库:

sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev zip
sudo apt-get install libcups2-dev    // gcc g++
sudo apt-get install libasound2-dev
sudo apt-get install libfreetype6-dev  //freetype font
sudo apt-get install libfontconfig1-dev //fontconfig1 font

这一步如果不做,在进行编译的时候就各种提示缺少什么,然后提示你sudo apt install xxx,其实不如提前做了。值得一提的是,后面两个依赖是字体依赖,一个是freetype,一个是fontconfig。

二、准备jdk7

这里需要说明的是,ubuntu1804上已经不能直接通过apt install 安装openjdk7了,需要自己下载安装。这里给出一个下载速度很快的网址:https://cdn.azul.com/zulu/bin/zulu7.44.0.11-ca-jdk7.0.292-linux_x64.tar.gz

这个openjdk7是免安装版本,解压之后直接放到一个目录下(/usr/java)就可以使用了,需要设置环境变量,一般系统的环境变量都在/etc/profile文件和他包含的文件夹/etc/profile.d里面的sh文件,这里可以建立一个单独的java.sh,如下所示:

huali@huali:~$ cat /etc/profile.d/java.sh
export JAVA_HOME=/usr/java/jdk1.7.0
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin
export LANG=C

让配置文件生效,命令行下运行source /etc/profile即可。

jdk7准备好了,可以验证一下:

huali@huali:~$ java -version
openjdk version "1.7.0_292"
OpenJDK Runtime Environment (Zulu 7.44.0.11-CA-linux64) (build 1.7.0_292-b07)
OpenJDK 64-Bit Server VM (Zulu 7.44.0.11-CA-linux64) (build 24.292-b07, mixed mode)

三、准备jdk8源码

源码下载,有的是从oracle官网,有的是从hg上去克隆下载,还有别人给的csdn下载地址,速度堪忧,尤其是csdn给出的各种下载,版本老旧,若要支持内核4以上,还需要改hotspot/make/linux/Makefile里面的一个SUPPORTED_OS_VERSION变量。这里推荐下载码云上的jdk8u源码:https://gitee.com/ckl111/openjdk-jdk8u,速度很快,而且不用修改支持内核4的配置。

四、重新安装make

编译环境,这里主要对于gcc,make的说明,ubuntu1804的make版本好像是4以上,这里有必要换成3.81版本。

1、下载make源码:https://ftp.gnu.org/gnu/make/,解压缩

2、修改源码glob/glob.c文件中的代码,注释两行:

3、配置、编译、安装三步曲

./configure --prefix=/usr/local/make-3.81
make
sudo make install

最好卸载原来的make: sudo apt remove make,然后替换新的make:sudo cp /usr/local/make-3.81/bin/make /usr/bin/make

huali@huali:~$ make -v
GNU Make 3.81
Copyright (C) 2006  Free Software Foundation, Inc.
This is free software; see the source for copying conditions.
There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A
PARTICULAR PURPOSE.This program built for x86_64-unknown-linux-gnu

五、重新安装gcc,g++

通过apt install安装的依赖库之后,默认的gcc,g++现在是7.3版本,这个最好改为4.8,修改的办法就是直接apt install安装gcc-4.8 g++-4.8,然后替换/usr/bin目录下的gcc,g++。

sudo apt install gcc-4.8 g++-4.8
sudo rm /usr/bin/gcc /usr/bin/g++
sudo ln -s /usr/bin/gcc-4.8 /usr/bin/gcc
sudo ln -s /usr/bin/g++-4.8 /usr/bin/g++

验证一下:

huali@huali:~$ gcc --version
gcc (Ubuntu 4.8.5-4ubuntu8) 4.8.5
Copyright (C) 2015 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

六、开始编译

前面所有的准备工作都已经做好了,源码也准备好,就可以开始配置,编译:jdk8源码中的configure并不是一个可执行程序,所以可以这样来配置:

bash configure

这一步可能会提示很多错误,如果是需要安装libfreetype6-dev,而且机器上已经安装了,那是因为freetype安装之后,并不是以freetype存在,而是freetype2存在,所以需要通过两个配置选项指定他们的依赖头文件和依赖库位置:

bash configure --with-freetype-include=/usr/include/freetype2 --with-freetype-lib=/usr/lib/x86_64-linux-gnu

没有报错,就可以继续执行make指令了:

sudo make all

耗时一般是半小时,我这里虚拟机内存只准备了1G,所以耗时会久一些,加大内存,比如2G,应该就是半小时左右:

编译会生成两个images,其实都是jdk,他们存放在images目录下,还会生成一个单独的jdk目录,都在build/linux-x86_64-normal-server-release下。

主要参考了这篇文章:https://blog.csdn.net/dghgfhk/article/details/103356051,才顺利编译了jdk8,如果你遇到了问题,也可以到这里看看。

文中的安装命令apt和apt-get其实都可以使用,就是安装的意思,早期的ubuntu默认只有apt-get,现在apt,apt-get都可以使用。

ubuntu1804源码编译jdk8相关推荐

  1. Ubuntu 15.04 安装TensorFlow(源码编译) 及测试梵高作画

    介绍Google的TensorFlow机器学习开源库,在UbuntuKylin上的安装和和源码编译. 原始官方文档参见:http://www.tensorflow.org. 本电脑配置如下: 3.19 ...

  2. Tensorflow源码编译

    相比源码编译各版本之间遇到的坑来说,pip安装真心省事.不过由于项目需要采用C++实现的整个感知模块,只能把DL前向传播这块也写成C++形式.这是我去年的编译过程,当时有不少坑没能记录下来,以后有机会 ...

  3. Ubuntu 20.04 源码编译Paddle2.2.2

    做研发,总是要不停装新机器和新系统.今天尝试了一下编译Paddle2.2.2. 先说结果: (1)Ubuntu20.04 + Python3.8.10 + gcc-8 (2)cuda和cudnn的版本 ...

  4. Android 源码编译及真机刷机实录

    最近接到一个项目,需要接触 Android 源码,所以走了一遍源码编译和刷机的过程,从开始到成功花了差不多一周的时间,踩了很多坑,在此记录一下. 整体分为四个部分: 文章目录 1.环境配置 1.1 创 ...

  5. 【Flink源码篇】Flink 1.15.0源码编译

    目录 1. 下载源码并解压 2. Flink项目配置 3. 源码编译 4. 编译问题记录 5. IDEA调试Flink程序 1. 下载源码并解压 从github下载Flink的源码:https://g ...

  6. spring源码编译

    目录 1.spring源码编译 1.1 准备工作 1.2 构建工具准备 1.3 修改build.gradle 1.4 编译工作 1.5 导入项目到idea中 1.spring源码编译 1.1 准备工作 ...

  7. 写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实

    好奇害死羊 很多小伙伴们做Java开发,天天写Java代码,肯定离不开Java基础环境:JDK,毕竟我们写好的Java代码也是跑在JVM虚拟机上. 一般来说,我们学Java之前,第一步就是安装JDK环 ...

  8. java调用clang编译的so_写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实

    好奇害死羊 很多小伙伴们做Java开发,天天写Java代码,肯定离不开Java基础环境:JDK,毕竟我们写好的Java代码也是跑在JVM虚拟机上. 一般来说,我们学Java之前,第一步就是安装JDK环 ...

  9. 5单个编译总会编译全部_玩转Android10(五)源码编译开发中常用命令

    源码开发编译中,熟练掌握常用命令,可以提高开发工作效率.Android源码中,将相关的命令分为如下几类: 1.初始化源码编译环境 初始化编译环境,为后续提供如lunch.make.xxgrep.god ...

最新文章

  1. eclipse实用快捷键
  2. Scrapy shell调试网页的信息
  3. 产品路线图的三种模型(RICE/MoSCoW/Kano),教你如何对需求进行优先级排序
  4. 图像处理特征不变算子系列之KLT算子
  5. c# hash 泛型_C# 泛型Dictionary (Hashtable)
  6. 作业一(高见老师收)
  7. 【学习笔记】opencv的python接口 轮廓特征值 滚动条控制阈值参数
  8. 最简化Selenium环境安装
  9. Linux下架设邮件服务器全攻略(二)
  10. 比Postman更好用!在国产接口调试工具Apipost中使用Mock
  11. java工作笔记017---java8新特性_使用lamda表达式进行List分组_排序_去重_随时更新
  12. 33.MySQL高可用架构
  13. 通讯录获取源码_[源码和文档分享]基于Java语言的C/S模式通讯录备份和查询软件...
  14. 常用视频格式与视频编解码标准介绍
  15. JavaScript ,js基础
  16. android 仿新浪微博转发 评论悬浮框的功能
  17. npm WARN read-shrinkwrap This version of npm is compatible with lockfileVersion@1, but package-lock.
  18. Kubernetes(k8s)四、Pod生命周期(初始化容器的应用,探针liveness、readliness应用,)
  19. iOS 图片捏合放大缩小 点击放大缩小
  20. oracle 取月份的第一天

热门文章

  1. eclipse个人常用快捷键整理1.0
  2. 量子计算机在日常生活中常,量子世界奇妙无比微小的量子极大将会改善我们的日常生活!...
  3. USB转TTL 模块输出3.3V - USB降压模块
  4. WebService使用
  5. Kubectl基础命令
  6. git拉取分支中指定文件到本地
  7. 空间几何-向量在另外一个向量上的投影计算
  8. 【深度学习框架】pytorch之分布式数据并行化DDP
  9. Transformer20
  10. OSChina 周五乱弹 —— 你不会知道老板在女装大佬面前多主动