ubuntu1804源码编译jdk8

2023-05-16

    这里纯粹自己弄着玩,因为以前没有成功过,这里记录一下,就是让遇到问题的人可以规避问题,快速编译自己的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都可以使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ubuntu1804源码编译jdk8 的相关文章

随机推荐

  • 2020年csdn盘点

    十年前就注册了csdn账号 xff0c 之后一直没有写过博客 xff0c 都是看别人的博客 xff0c 等到2015年左右发表了第一篇自己的博客 xff0c 直到2016年底觉着做技术的就需要记录自己的博客 xff0c 不仅是自己学习的过程
  • chrome浏览器安装react-devtools

    react devtools是react开发时的一个浏览器插件 xff0c 对于各大主流高级浏览器都有扩展程序可以安装 xff0c 官方的地址默认是https github com facebook react devtools xff0c
  • react+typescript项目构建

    react项目构建可以很简单 xff0c 但是如果是结合typescript xff0c 其实也不是很麻烦 xff0c 官网也有很明确的说明 有两种办法 xff1a 1 直接构建带有typescript的react项目 xff0c 我们需要
  • react项目启动报错:Uncaught TypeError: Cannot read property ‘forEach‘ of undefined

    如题 xff0c react项目启动报错 xff0c 具体信息 xff0c 如下所示 xff1a 这个问题是因为浏览器安装了react devtools扩展程序导致的 xff0c 很多人的解决办法就是直接禁用react devtools x
  • react组件之间传值

    看过一些文章介绍react组件之间传值 xff0c 无外乎以下几种情况 xff1a 父子组件之间相互传值 xff0c 兄弟节点之间传值 最常见的就是父子组件 xff0c 做法也很简单 xff1a 就是在父组件中直接通过props属性的方式将
  • 利用mocha进行以太坊智能合约编译部署测试

    使用智能合约编程语言solidity编写的智能合约 xff0c 除了可以直接通过以太坊的工具链truffle ganache cli进行测试之外 xff0c 还可以结合mocha进行单元测试 mocha单元测试本质上 xff0c 还是需要对
  • electron报错:Uncaught Error: A dynamic link library (DLL) initialization routine failed

    如题所示 xff0c 我们在进行node 43 electron开发桌面应用的时候 xff0c 经常会遇到这样的问题 xff1a 根据提示是因为ref依赖模块没有合适的编译版本 xff0c 但是我们进行npm install的时候没有报错啊
  • C语言 利用冒泡排序法对10个字符由小到大排序

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • truffle+ganache-cli构建简单以太坊智能合约并编译部署

    以前接触过以太坊工具链来做区块链练手项目 xff0c 后来荒废了 xff0c 如今再次捡起来 xff0c 算是回忆和加深 之前可能因为网络的原因 xff0c 在truffle各种初始化编译合成智能合约都遇到了好多问题 xff0c 如今再次尝
  • docker-compose搭建mongo+elasticsearch+graylog运行环境

    graylog是一个小型的开源日志收集 分析 展示框架 主要graylog运行需要mongo elasticsearch xff0c 所以他们就组成了一个小的整体 一般在虚拟机上搭建 xff0c 可以分开安装部署 xff0c 但是既然是一个
  • word文档中插入图片显示不全解决办法

    在windows下写word文档 xff0c 正常情况下 xff0c 我们应该不会遇到插入图片显示不全的问题 xff0c 好像是如果在已有的文档中插入图片 xff0c 比如文档中间插入 xff0c 图片没办法自动扩展空间 xff0c 这就导
  • quasar构建linux版本electron项目以及如何让electron程序在linux下运行

    quasar构建 xff0c 默认命令是 xff1a quasar build m electron 如果要支持linux xff0c 通常是直接加参数 target linux或者简写 T linux quasar build m ele
  • docker容器改变时区

    默认情况下的docker容器启动之后 xff0c 系统时间是UTC时间 xff0c 这导致和我们的北京时间相差8小时 xff0c 会引出很多问题 有一些容器是和项目一起构建的 xff0c 我们可以在构建的时候 xff0c 将系统时区修改为A
  • elasticsearch加入中文分词器elasticsearch-analysis-ik插件

    前言 elasticsearch作为一个分布式弹性存储与检索系统 xff0c 默认是不支持中文分词的 xff0c 但是呢 xff0c 这个工作有人做 xff0c 估计都是中国人做的吧 什么是中文分词呢 xff0c 简单来说 xff0c 就是
  • c语言自定义tcp协议实现socket通信

    一般的tcp协议示例 xff0c 大家给出的demo都是类似一个helloworld的示例 xff0c 简单罗列了socket建立 xff0c 创建连接 xff0c 发送数据 xff0c 关闭连接的过程 xff0c 实际上tcp通信确实也就
  • c语言自定义tcp协议实现socket通信(windows版本)

    前面一篇博客介绍了mac linux下通过C语言自定义协议实现socket通信的示例 xff0c 因为大部分api与windows还有很多区别 xff0c 这里就特意把windows下的tcp通信实例给介绍一下 无论是linux xff0c
  • macos升级体验

    周末在家里把macos从10 11 6版本升到了10 14 6版本 xff0c 其中的过程基本大同小异 后面想继续升级 xff0c 发现遇到了问题 网上有的说需要一步一步来升级 xff0c 如果是10 11 xff0c 需要先升级到10 1
  • xcode开发c语言开启多target

    xcode开发c语言 xff0c 在选择project template时选择command line tool xff0c 后面填入product name xff0c 最后选择存储位置就可以了 但是一般而言c语言项目只有一个main函数
  • vaex 将csv转换为hdf5

    I have a massive CSV file which I can not fit all into memory at one time How do I convert it to HDF5 We are working to
  • ubuntu1804源码编译jdk8

    这里纯粹自己弄着玩 xff0c 因为以前没有成功过 xff0c 这里记录一下 xff0c 就是让遇到问题的人可以规避问题 xff0c 快速编译自己的jdk 相信很多学java的人都看过或者了解过一本书 深入理解java虚拟机 xff0c 里