JDK12编译

简述

本来想编译jdk7的,但是由于jdk7实在是太老,很多工具也很老,下载链接也失效了。就是坑太多了,果断放弃。决定编译一下jdk12


本文将参考《深入理解JAVA虚拟机》第二版和官方编译指南进行jdk编译

准备工作

  • 系统:windows自带的Linux子系统(WSL),Ubuntu18.04LTS版

    • 首先在windows10中开启WSL
    • windows软件商店中安装ubuntu18.04LTS,或者chocolatey安装
      choco install wsl-ubuntu-1804
      打开vscode可以安装wsl插件用来文件编辑非常方便
    • 更换阿里源,源版本也要对应ubuntu18,否则安装不了工具。别忘了更换源之后还要执行更新命令,否则出错
      sudo apt update
      sudo apt upgrade
    • 使用git在码云中把jdk12的源码克隆下来,直接搜jdk12就有很多
  • 工具:这里根据官方编译指南进行操作

    • 安装开发者包
      sudo apt-get install build-essential
    • 安装jdk11,编译一个版本的jdk需要上一版本的jdk
      sudo apt-get install openjdk-11-jdk
    • 安装其他扩展库

      #安装freetype
      sudo apt-get install libfreetype6-dev
      #安装cups
      sudo apt-get install libcups2-dev
      #安装x11
      sudo apt-get install libx11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev
      #安装ALSA
      sudo apt-get install libasound2-dev
      #安装libffi
      sudo apt-get install libffi-dev
      #安装unzip
      sudo apt install unzip
      #安装zip
      sudo apt install zip
    • 安装构建工具,wsl中自带了make 4.1

      #安装Autoconf
      sudo apt-get install autoconf

开始构建

使用configure脚本

jdk的构建要使用make工具,而make工具要调用configure创建的文件中的参数。进入cd到jdk源代码的目录中使用bash configure [options]创建configure文件,参数有很多可以使用bash configure --help=short查看,例如我我自己使用的命令是:

bash configure --with-num-cores=2 --with-target-bits=64 --with-memory-size=2048

表示使用2个核心和2G内存进行编译,编译64位的。

使用configure遇到的问题

在使用configure脚本的过程中,autoconf会自动去配置变量,如果出现找不到的工具autoconf就会提示,例如:

configure: error: Could not find fontconfig!
You might be able to fix this by running 'sudo apt-get install libfontconfig1-dev'.
configure exiting with result code 1

根据提示安装可以了。configure文件构建好后出现下列提示:

Tools summary:
* Boot JDK:       openjdk version "11.0.6" 2020-01-14 OpenJDK Runtime Environment (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1) OpenJDK 64-Bit Server VM (build 11.0.6+10-post-Ubuntu-1ubuntu118.04.1, mixed mode, sharing)  (at /usr/lib/jvm/java-11-openjdk-amd64)
* Toolchain:      gcc (GNU Compiler Collection)
* C Compiler:     Version 7.5.0 (at /usr/bin/gcc)
* C++ Compiler:   Version 7.5.0 (at /usr/bin/g++)

Build performance summary:
* Cores to use:   2
* Memory limit:   2048 MB

并且在源码目录下建立一个build文件夹,编译好的jdk就放在build文件夹中:
JDK12编译_第1张图片

使用make构建

我编译大概花了30分钟

#在jdk源码目录下输入
make

编译完成

完成提示
编译完成1.png

完成目录
JDK12编译_第2张图片

可以进入jdk/bin中通过java -version验证是否编译完成
JDK12编译_第3张图片

最后

如果你遇到了什么奇怪的问题,请看这两个文件中的其中一个

  • doc/building.html (html version)
  • doc/building.md (markdown version)

你可能感兴趣的:(java,jvm,ubuntu)