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_HOME unset 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) >& echo "*** This OS is not supported:" `uname -a`; exit ; #endif
方案二:添加版本支持
nano hotspot/make/linux/Makefile
SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% % %
2,make参数语法,添加'I'
nano hotspot/make/linux/makefiles/adjust-mflags.sh
# line . (新版本make语法有变动)
s/ -\([^ I][^ ]*\)j/ -\ -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.-internal-sunil_2016_11_21_18_06-b00)
OpenJDK -Bit Server VM (build 25.0-b70, mixed mode)
sunil@ubuntu:~/Downloads/openjdk$
参考文档
https://blog.mlworks.cn/tech/compile-openjdk8-ubuntu-16.04.html
OpenJDK 编译-Linux环境的更多相关文章
- Linux环境PostgreSQL源码编译安装
Linux环境PostgreSQL源码编译安装 Linux版本: Red Hat 6.4 PostgreSQL版本: postgresql-9.3.2.tar.gz 数据存放目录: /var/post ...
- Linux环境编译动态库和静态库总结
对Linux环境动态库和静态库的一些基础知识做一些总结, 首先总结静态库的编译步骤. 1 先基于.cpp或者.c文件生成对应的.o文件 2将几个.o文件 使用ar -cr命令 生成libname.a文 ...
- QWT编译与配置-Windows/Linux环境
QWT编译与配置-Windows/Linux环境 QWT和FFTW两种开源组件是常用的工程软件支持组件,QWT可以提供丰富的绘图组件功能,FFTW是优秀数字波形分析软件.本文使用基于LGPL版权协议的 ...
- Linux环境下使用VSCode编译makefile文件的注意事项
Linux环境下使用VSCode编译makefile文件的注意事项 首先安装C/C++的两个依赖 在debug,launch会自动的生成下方的launch.json launch.json { // ...
- linux环境下安装git(采用github下载git源码编译)
[目的]:linux环境下 安装配置git成功 [准备条件]linux系统,git包 1.先行下载git包 -- 从github上https://github.com/git/git/releases ...
- Linux 环境下 C++ 的开发编译
Linux环境下C++程序的开发编译学习笔记 环境:vmware 运行下的Ubuntu 16.04 姓名:谢津 时间:2018/5/24 内容:1)vim的安装及配置:2)第一个C++程序的编写与编译 ...
- PCL库在Linux环境下的编译安装
PCL库在Linux环境下的编译安装 PCL库的源码库:https://github.com/PointCloudLibrary/pcl 下载完了之后解压下来 编译库的几个步骤 mkdir build ...
- Linux环境下使用gcc编译,gdb反汇编C语言程序
使用虚拟机 VMware Workstation 10 Linux环境:Ubuntu 14.04 LTS Server amd64 我把过程截图如下. 首先是hello world程序: 备注: ...
- [转载]Linux 环境下编译 0.11版本内核 kernel
最近在看<.如果Clobber/Modify 为空,则其前面的冒号(:)必须省略. 2.如果Output,Input,Clobber/Modify都为空,Output,Input之前的冒号(:) ...
随机推荐
- linux 高性能服务器编程
1. 高性能定时器:时间轮,时间堆 (處理超時時間,如nginx使用紅黑樹,找出最可能超時的事件) 2. 高性能服务器程序框架:(nginx 使用的是基於事件模型,epoll,不阻塞,異步處理) 两种 ...
- ubuntu14.04+nvidia driver+cuda8+cudnn5+tensorflow0.12
文章在简书里面编辑的,复制过来貌似不太好看,还是到简书的页面看吧: http://www.jianshu.com/p/c89b97d052b7 1.安装环境简介: 硬件: cpu:i7 6700k g ...
- 【转】Oracle索引HINT的使用
转自:Oracle索引HINT的使用 存储在数据库中数据的分布情况开发人员或管理员比Oracle优化器更加的清楚,在优化器不能作出最有查询路径选择的情况下,使用HINT(提示)人为的固定查 ...
- [ACM训练] 算法初级 之 数据结构 之 栈stack+队列queue (基础+进阶+POJ 1338+2442+1442)
再次面对像栈和队列这样的相当基础的数据结构的学习,应该从多个方面,多维度去学习. 首先,这两个数据结构都是比较常用的,在标准库中都有对应的结构能够直接使用,所以第一个阶段应该是先学习直接来使用,下一个 ...
- 介绍两个挺好用的基于Jquery的上传工具
一.ajaxFileUpload 二.fineUploader
- Java|今天起,别再扯订阅和回调函数
编程史上有两个令人匪夷所思的说辞,一个是订阅,一个是回调函数. 我想应该还有很多同学为“事件的订阅”和“回调函数”所困扰,因为事情本来就不应该按这个套路来解释. 多直白,所谓的“回调函数”你完全可以线 ...
- 关于Linux系统下错误“浮点数异常(核心已转储)”的分析
1.问题发现 有这样一段代码: #include <stdio.h> int main() { int a, b, num1, num2, temp; printf("pleas ...
- mongo遍历表
$mongo = new MongoClient("mongodb://192.168.8.189:27017"); $collectObj = $mongo->select ...
- firefox浏览器无法显示bootstrap图标问题总结
在学习bootstrap的时候,有一个问题始终非常疑惑和困扰,就是firefox无法显示bootstrap自带的那套名为“glyphicon”的图标,在图标的引用处显示的是一个小方块,如图所示(4前面 ...
- CF2.BC
B. Arpa's obvious problem and Mehrdad's terrible solution time limit per test 1 second memory limit ...