说明:笔者是在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环境相关推荐

  1. mips linux 编译,Linux环境下mips-gcc编译

    背景 在之后的学习中,需要在自己的mips架构cpu上编写一系列工具.不想使用mips汇编代码编写这些工具,希望使用c语言编写,并编译为mips机器语言.所以这次编译没有编译c库(不能使用自带的头文件 ...

  2. Linux环境编译安装OpenJDK

    Centos6.5 AMD64位机器 Java的源码是C,C++和Java实现的,所以还需要有一个安装好的java建议选OracleJDK参考文末 安装OracleJDK Linux环境安装卸载JDK ...

  3. 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 ...

  4. Linux环境中Visual Studio Code的配置使用----编译运行C/C++(良心教程)

    之前的博文分享了下载安装[VS code]的详细教程, 有需要速戳–>Linux环境中Visual Studio Code 安装配置及其卸载(详细教程) 本篇博文分享本人初次使用[VS code ...

  5. 成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入

    成功解决:将后缀.pyx格式文件(linux环境)编译成pyd文件(windows环境下)实现python编程加载或导入 目录 解决问题 解决思路 解决方法 解决问题 .pyx格式文件,在window ...

  6. Linux 之八 完整嵌入式 Linux 环境、(交叉)编译工具链、CPU 体系架构、嵌入式系统构建工具

      最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,由于之前对嵌入式 Linux 环境并不是很了解,因此,第一步就是需要了解如何搭建一个完整的嵌入式 Linux 环境.现在将学习心得记录 ...

  7. linux mysql5.6编译_Linux 环境下编译安装MySQL5.6的笔记记录

    一.首先搭建好Linux环境,我这边使用的是redhat enterprise 6.5,并且建议磁盘划分逻辑卷,以便后期的扩容工作. 二.环境搭建好了之后,我们就要去准备MySQL的安装文件,到现在为 ...

  8. 编译高性能linux so库,关于如何在linux环境下生成a库和so库(改,附图)-Go语言中文社区...

    一般linux环境下的链接库分为a库和so库,分别表示静态链接库和动态链接库,其作用是把C程序编译好做成一种可执行链接文件,c主程序文件调用这些程序的函数接口是可以使用a库或so库,在主程序中只需要i ...

  9. g++ linux 编译开栈_Linux下编写C++服务器(配置C++编译调试环境)

    Linux下编写C++服务器(配置C++编译调试环境) 安装好linux虚拟机,确定能上网后,我们可以开始编写C++程序了,但在这之前我们需要下载编译器和调试器 下载gcc 1.在终端输入yum se ...

最新文章

  1. java boolean io流_java基础入门-day22-IO流
  2. 院士报告 | 李德仁:基于数字孪生的智慧城市(PPT)
  3. 爷青回!16年前“打球AI”意外走红,程序员留下了自己的ICQ和MSN
  4. set的用法及短语_人教版九全Unit 14重点短语、重点句型、课文讲解
  5. nowcoder 202F-平衡二叉树
  6. 人工神经网络发现生物神经网络,智源超高清电镜图像分割挑战赛开赛
  7. 一文秒懂!Python字符串格式化之format方法详解
  8. 关于在ubuntu下配置AMD显卡驱动的总结
  9. Spring框架----AOP的概念及术语
  10. c++ using 前置声明_详解C++ 前置声明
  11. Java--随机数和随机数种子(转)
  12. 关于Java中volatile关键字笔记
  13. Git 本地分支关联远程分支
  14. JAVA 实现 Word转PDF
  15. 计算机无法访问inter,电脑网络提示无Internet访问权限解决办法
  16. python爬虫详解(三)——爬取世界常用密码并保存到字典内
  17. 国内最好的五大广告聚合平台
  18. 一站购遍全球 史上最长亚马逊Prime会员日即将开启
  19. 还有人在质疑数据挖掘是泡沫吗?千万不要叶公好龙
  20. 王半仙儿的日记-0001

热门文章

  1. ejb 3中bean的种类
  2. 前景检测算法_3(GMM)
  3. SqlServer时间函数的使用例子整理
  4. Linux04-文件系统权限与ACL权限
  5. 小米4c怎么添加语言怎么设置在哪里,小米4c路由器设置教程
  6. linux系统yum源,Linux开启安装EPEL YUM源
  7. flask url构建_如何为生产构建构建Flask-RESTPlus Web服务
  8. 【廖雪峰Python学习笔记】面向对象高级编程
  9. 关于get和post两种提交方式
  10. (C++)1021 个位数统计