CentOS 编译 openjdk
1. 概述
<<深入理解Java虚拟机--JVM高级特性与最佳实践>>第一章就谈到自己编译jdk,来吧。
2. 编译环境
VMware12
CentOS-7-x86_64-Everything-1611
3. 软件准备
Bootstrap JDK: jdk-7u79-linux-x64.tar.gz
OpenJDK: https://jdk7.java.net/source.html
4. 编译依赖
4.1 安装alsa软件包
yum -y install alsa-lib-devel
4.2 安装 cups-devel
yum -y install cups-devel
4.3 安装lib相关库
yum -y install libX*
4.4 安装gcc
yum -y install gcc gcc-c++
4.5 安装freetype
4.5.2 安装 rpm -ivh freetype-2.4.11-9.el7.x86_64.rpm
4.6 安装ant
yum -y install ant
说明: 这时会将openjdk作为依赖进行安装; 安装完, java -version| ant -version看看
&& 使用ant.tar.gz解压方式安装 不要安装配置jdk依赖
4.7 安装libstdc++
yum -y install libstdc++-static
说明: 此安装为解决编译时出错 ERROR: Cannot chcon libjvm.so
5. 环境变量配置 vim /etc/profile
export CLASSPATH
export JAVA_HOME
export LANG=C
export ALT_BOOTDIR=/usr/java/jdk1.7.0_76
export ALLOW_DOWNLOADS=true
export USE_PRECOMPILED_HEADER=true
export ARCH_DATA_MODEL=64
export HOTSPOT_BUILD_JOBS=4
export ALT_PARALLEL_COMPILE_JOBS=4
export SKIP_DEBUG_BUILD=false
export SKIP_FASTDEBUG_BUILD=true
export DEBUG_NAME=debug
export ALT_OUTPUTDIR=/usr/java/openjdk/build
6. 编译检查
make sanity
若输出结果为:Sanity check passed,表示设置正确
7. 执行编译
make
8. 编译时可能出现的其他问题
8.1 ./gamma: relocation error: /usr/java/jdk1.7.0_76/jre/lib/amd64/libjava.so:
删除 /usr/java/openjdk/hotspot/make/linux/Makefile文件中 所有test_gamma
(vim Makefile-> /test_gamma查找->:%s/&& \.\/test_gamma//g替换所有)
8.2 Error: time is more than 10 years from present:
/usr/java/openjdk/jdk/src/share/classes/java/util/CurrencyDate.properties文件中所有时间改为近期
vim 指令 /20..-搜索-> i 修改 -> esc退出i -> n下一个位置 -> i 直到全部改完
8.3 其他
make clean 可以清一下之前编译
9. 结果图

10. debug版jdk
/usr/java/openjdk/build-debug/j2sdk-image下的内容为debug版jdk
删除原有jdk,配置环境变量JAVA_HOME CLASSPATH PATH

查看jdk版本

CentOS 编译 openjdk的更多相关文章
- CentOS编译openjdk
编译openjdk 1. 下载openjdk源码 openjdk的官网是OpenJDK (java.net) 在网站左侧就能看到它的源码位置的链接 从图上可以看到,它的源码在两个位置有托管,Mercu ...
- Linux CentOS 6.9 Minimal 编译 OpenJDK 7
今天学习<深入理解Java虚拟机:JVM高级特性与最佳实践>一书,并动手在Linux系统上编译OpenJDK 7,初次搞不太顺利,特记录下编译操作细节. 一.前期准备 约定:工具默认安装目 ...
- JVM学习——编译OpenJDK
最近在学习<深入理解java虚拟机 第二版>这本书.书中第一部分建议大家自己编译OpenJDK.抱着学习态度也来编译个玩一玩.下面进入正题. 1.编译环境介绍 操作系统 CentOS Li ...
- CentOS编译安装NodeJS+Express
NodeJS是基于Chrome’s Javascript runtime,也就是Google V8引擎执行Javascript的快速构建网络服务及应用的平台,其优点有: 在CentOS编译安装Node ...
- Centos编译安装PHP 5.5笔记
本篇是在 Centos 6.4 32bit 下编译安装 php 5.5.5 的笔记,接上篇 Centos编译安装Apache 2.4.6笔记.php 5.5.x 和 centos 源里面的 php 5 ...
- 深入理解JVM(一)编译openJDK
此文总结的很不错:https://www.cnblogs.com/ACFLOOD/p/5528035.html 准备openJDK源码和环境 1.在linux和macOS上编译openJDK更加友好, ...
- 走进JVM之一 自己编译openjdk源码
想要深入了解JVM,就必须了解其实现机制.了解JVM实现的最好方法便是自己动手编译JDK.好了,让我们开始吧! 1. 准备工作 获取OpenJDK源码 本次编译选择的是OpenJDK7u,官方源码包 ...
- Mac上编译OpenJDK过程记录
编译OpenJDK主要为了学习HotSpot,编译过程在很多相关书籍中都有所涉及,但由于机型.机子具体环境的不同,很难有资料能够一步到位.还是得碰到具体问题通过上网查来一个个解决. 下载OpenJDK ...
- CentOS 编译 GCC 7.2
CentOS 编译 GCC 7.2 下载源码 wget http://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-7.2.0/gcc-7.2.0. ...
随机推荐
- Unity---解决重新调整游戏分辨率后,再运行游戏还是和之前分辨率一样的问题
经历 上次在Unity做了个小游戏,发布的时候忘了取消默认全屏了. 于是在Unity重新发布了一下,可是出来后分辨率还是默认全屏. 当时百思不得其解 原因 主要是因为当用Unity发布一个新游戏的时候 ...
- linux用到的命令
命令行下利用别名打开ss以及设置相关代理(写到~/.bashrc中使永久有效) #open proxy alias proxystart='gsettings set org.gnome.system ...
- scikit-learn中predict_proba用法 (与predict的区别)
predict_proba返回的是一个 n 行 k 列的数组, 第 i 行 第 j 列上的数值是模型预测 第 i 个预测样本为某个标签的概率,并且每一行的概率和为1. # conding :utf-8 ...
- mac 上安装vue模版-D2 Admin
1.首先下拉模版,打开mac自带“终端” 2.安装项目 3.出现的错误 4.启动项目
- Javascript 定时器的使用陷阱 (setInterval)
setTimeout(function(){ // 其他代码 setTimeout(arguments.callee, interval); }, interval); setInterval会产生回 ...
- iview 怎样屏蔽掉账户框自动显示账户名和密码(root,***)
用iview框架做出的登录页面,账户名和密码显示框,会自动有占位信息(root,****) 后来解决问题发现,只要在真正的输入框下面添加这样的一行隐藏的代码,占位信息会自动填充到隐藏的input框内, ...
- Linux下用tree命令列出树形图
命令用法: tree 参数: -a 显示所有文件和目录. -A 使用ASNI绘图字符显示树状图而非以ASCII字符组合. -C 在文件和目录清单加上色彩,便于区分各种类型. -d 显示目录名称而非内容 ...
- selenium IDE 命令二(断言、验证、等待、变量)
测试用例需要做断言和验证,在seleniumIDE中提供了断言和验证来对结果进行比较 首先通过打开seleniumIDE,在页面任意一个元素右键,选择最后一个选项“show all available ...
- 【C语言】-返回指针的函数与指向函数的指针
本文目录 前言 一.返回指针的函数 二.指向函数的指针 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.i ...
- Mybatis-动态SQL语句
有些时候,sql语句where条件中,需要一些安全判断,例如按某一条件查询时如果传入的参数是空,此时查询出的结果很可能是空的,也许我们需要参数为空时,是查出全部的信息.使用Oracle的序列.mysq ...