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文件夹中:
使用make构建
我编译大概花了30分钟
#在jdk源码目录下输入 make
编译完成
完成提示
完成目录
可以进入jdk/bin中通过java -version
验证是否编译完成
最后
如果你遇到了什么奇怪的问题,请看这两个文件中的其中一个
- doc/building.html (html version)
- doc/building.md (markdown version)
原文地址:https://segmentfault.com/a/1190000022219137
相关推荐
-
关于oracle的缓冲区机制与HDFS中的edit logs的某些关联性的思考 Java基础
2019-7-3
-
解执行maven项目出现 SLF4J: Failed to load class “org.slf4j.impl.StaticLoggerBinder”. error Java基础
2019-6-2
-
多线程搜索与排序 Java基础
2019-9-3
-
Android Studio多模块的SDK项目打包和混淆 Java基础
2020-6-16
-
SSM框架快速整合搭建(无maven版) Java基础
2020-5-30
-
Android 华为凹口屏基本了解 Java基础
2019-8-21
-
5分钟搞懂如何在Spring Boot中Schedule Tasks Java基础
2019-9-1
-
Java执行JavaScript脚本破解encodeInp()加密 Java基础
2019-5-5
-
笔记-域名配置和Springboot Https配置 Java基础
2020-6-14
-
分享几个 SpringBoot 实用的小技巧 Java基础
2019-5-20