OpenJDK 编译-Linux环境
说明:笔者是在Ubuntu 16.04虚拟机中编译 OpenJDK 8
源码下载
http://download.java.net/openjdk/jdk8/
推荐直接下载openjdk-8-src-b132-03_mar_2014.zip
环境准备:
安装bootstrap JDK,笔者安装的jdk7;
在环境变量PATH中添加jdk的bin目录,不添加的话,在编译第一步时需要带参数
解压后阅读README-builds.html,按照要求安装Linux环境需要的软件。不清楚要安装哪些,在编译第一步失败的时候会提示你安装。
#如果之前有设置的话,这两个环境变量需要去掉,不然会出问题。unset JAVA_HOMEunset CLASSPATH
编译
切换到解压后目录
第一步:
bash ./configure
或者带jdk目录,path为bootstrap JDK的目录
bash ./configure --with-boot-jdk=path
第二步:
make all
*遇到的坑爹问题
1,版本问题,recipe for target 'check_os_version' failed
方案一:直接注释检查
nano hotspot/make/linux/Makefile
check_os_version: #ifeq($(DISABLE_HOTSPOT_OS_VERSION_CHECK)$(EMPTY_IF_NOT_SUPPORTED),) # $(QUIETLY) >&2 echo "*** This OS is not supported:" `uname -a`; exit 1; #endif
方案二:添加版本支持
nano hotspot/make/linux/Makefile
SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3% 4%
2,make参数语法,添加'I'
nano hotspot/make/linux/makefiles/adjust-mflags.sh # line 67. (新版本make语法有变动)s/ -\([^ I][^ ]*\)j/ -\1 -j/
3,undefine symbols
错误
提升一个模板函数定义至头文件,避免出现undefined symbols错误。
# 将 hotspot/src/share/vm/gc_implementation/g1/g1SATBCardTableModRefBS.cpp 中的template <class T> void write_ref_array_pre_work(T* dst, int count)方法,提升到对应的
头文件
g1SATBCardTableModRefBS.hpp中。
# 模板函数定义需要出现在头文件中,以便编译器为其生成特化版本。若无此修改,运行编译后的java程序,将出现undefine symbols错误。
编译成功标识
验证
1,the build result. This directory typically looks like:
build/linux-x64-normal-server-release
2,JDK输出目录:
In particular, the build/*/images/j2sdk-image/bin
directory should contain executables for the OpenJDK tools and utilities for that configuration.
3,查看版本
3.1直接在bin目录下运行 ./java -version
3.2将编译好的JDK复制到适当目录,配置JAVA_HOME指向该目录,使环境变量生效后,执行java -version命令,就能看到带用户机器名的jdk版本。
cp build/linux-x86_64-normal-server-release/images/j2sdk-image/ -r /usr/lib/jdk/openjdk8
sunil@ubuntu:~/Downloads/openjdk$ java -version openjdk version "1.8.0-internal" OpenJDK Runtime Environment (build 1.8.0-internal-sunil_2016_11_21_18_06-b00) OpenJDK 64-Bit Server VM (build 25.0-b70, mixed mode) sunil@ubuntu:~/Downloads/openjdk$
参考文档
README
深入理解Java虚拟机(第2版)
https://blog.mlworks.cn/tech/compile-openjdk8-ubuntu-16.04.html
转载于:https://www.cnblogs.com/sunilsun/p/6078171.html
OpenJDK 编译-Linux环境相关推荐
- mips linux 编译,Linux环境下mips-gcc编译
背景 在之后的学习中,需要在自己的mips架构cpu上编写一系列工具.不想使用mips汇编代码编写这些工具,希望使用c语言编写,并编译为mips机器语言.所以这次编译没有编译c库(不能使用自带的头文件 ...
- Linux环境编译安装OpenJDK
Centos6.5 AMD64位机器 Java的源码是C,C++和Java实现的,所以还需要有一个安装好的java建议选OracleJDK参考文末 安装OracleJDK Linux环境安装卸载JDK ...
- Linux下的编译(环境是centos6.8 gcc 4.4.7)
Linux下的编译(环境是centos6.8 gcc 4.4.7) 1. 运行命令:yum install gcc gcc-c++ bzip2 bzip2-devel bzip2-libs Pytho ...
- Linux环境中Visual Studio Code的配置使用----编译运行C/C++(良心教程)
之前的博文分享了下载安装[VS code]的详细教程, 有需要速戳–>Linux环境中Visual Studio Code 安装配置及其卸载(详细教程) 本篇博文分享本人初次使用[VS code ...
- 成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入
成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入 目录 解决问题 解决思路 解决方法 解决问题 .pyx格式文件,在window ...
- Linux 之八 完整嵌入式 Linux 环境、(交叉)编译工具链、CPU 体系架构、嵌入式系统构建工具
最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,由于之前对嵌入式 Linux 环境并不是很了解,因此,第一步就是需要了解如何搭建一个完整的嵌入式 Linux 环境.现在将学习心得记录 ...
- linux mysql5.6编译_Linux 环境下编译安装MySQL5.6的笔记记录
一.首先搭建好Linux环境,我这边使用的是redhat enterprise 6.5,并且建议磁盘划分逻辑卷,以便后期的扩容工作. 二.环境搭建好了之后,我们就要去准备MySQL的安装文件,到现在为 ...
- 编译高性能linux so库,关于如何在linux环境下生成a库和so库(改,附图)-Go语言中文社区...
一般linux环境下的链接库分为a库和so库,分别表示静态链接库和动态链接库,其作用是把C程序编译好做成一种可执行链接文件,c主程序文件调用这些程序的函数接口是可以使用a库或so库,在主程序中只需要i ...
- g++ linux 编译开栈_Linux下编写C++服务器(配置C++编译调试环境)
Linux下编写C++服务器(配置C++编译调试环境) 安装好linux虚拟机,确定能上网后,我们可以开始编写C++程序了,但在这之前我们需要下载编译器和调试器 下载gcc 1.在终端输入yum se ...
最新文章
- java boolean io流_java基础入门-day22-IO流
- 院士报告 | 李德仁:基于数字孪生的智慧城市(PPT)
- 爷青回!16年前“打球AI”意外走红,程序员留下了自己的ICQ和MSN
- set的用法及短语_人教版九全Unit 14重点短语、重点句型、课文讲解
- nowcoder 202F-平衡二叉树
- 人工神经网络发现生物神经网络,智源超高清电镜图像分割挑战赛开赛
- 一文秒懂!Python字符串格式化之format方法详解
- 关于在ubuntu下配置AMD显卡驱动的总结
- Spring框架----AOP的概念及术语
- c++ using 前置声明_详解C++ 前置声明
- Java--随机数和随机数种子(转)
- 关于Java中volatile关键字笔记
- Git 本地分支关联远程分支
- JAVA 实现 Word转PDF
- 计算机无法访问inter,电脑网络提示无Internet访问权限解决办法
- python爬虫详解(三)——爬取世界常用密码并保存到字典内
- 国内最好的五大广告聚合平台
- 一站购遍全球 史上最长亚马逊Prime会员日即将开启
- 还有人在质疑数据挖掘是泡沫吗?千万不要叶公好龙
- 王半仙儿的日记-0001