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 SHELL 命令入门题目(一)
新年新气象,注重知识积累,提高手敲代码能力,而不是眼高手低,只会复制黏贴. 1.使用shell 打印 “Hello World!” 2.求变量'hello world'的字符长度 3.$0 .$SHE ...
- 解决Xcode真机测试时ineligible devices的问题
升级了Xcode到6.3,连接真机测试时,出现不能选择设备.如图: 设备系统版本是8.3的,Xcode连接其他低系统版本的设备做真机测试时就不会有这个问题. 有人说这是Xcode6.3的bug. 我的 ...
- CATransition(os开发之画面切换) 的简单用法
CATransition 的简单用法 //引进CATransition 时要添加包“QuartzCore.framework”,然后引进“#import <QuartzCore/QuartzCo ...
- 做 Web 开发少不了这些的
抱歉,似乎有些标题党了.最近做服务器的热备,整理了些李纳斯工具的适用方法.看看还有不错的. 基本命令 sleep 500 暂停 ctrl + z 暂停 progress & 后台运行 jobs ...
- Django框架学习
两个月前学习的Django框架,写了个简易婚恋调查网站,代码就懒得全贴了,有两张图记录下
- C# SQL 面试题自我总结
1,asp.net单点登录机制 2,多线程同步机制 3,写一个冒泡排序算法 4,写一个递归算法 5,字符串反转 字符串分隔后调用reverse 方法. 6,sql 中ID自动增长,查询31到40条记录 ...
- WPF上传文件到服务器
利用WebClient 上传文件到服务器 创建一个空网站,创建一个UploadFile.aspx项, 服务器报500错误:检查文件保存路径是否存在,检查文件大小限制 protected void Pa ...
- cocoapods
iOS 最新版 CocoaPods 的安装流程 1.移除现有Ruby默认源 $gem sources --remove https://rubygems.org/ 2.使用新的源 $gem sourc ...
- iOS 面试总结 一
iOS 开发工程师之面试总结一 好久没有出去面试了,大概一年的时间都很稳定,最近出去面试感觉心里特别慌,没有了当时的勇气了,其实还是感觉自己的准备不是特别的充分,这是主要原因. 这段时间待得太安逸没了 ...
- Odoo 二次开发教程(五)-新API的介绍与应用
[关于odoo新API的介绍,Internet上资料很少,或者不够完整详实,这会对初学者造成很大的困惑,本篇的目的就是希望能帮助新手了解新API的大概] odoo 新api的实现是借助于python装 ...