文档章节

centos7 mini 系统openjdk9源码编译

骰子红豆豆
 骰子红豆豆
发布于 04/16 01:29
字数 1690
阅读 291
收藏 3

前提先看完这篇博文https://my.oschina.net/u/3829817/blog/1795177

openjdk的来源

根据GNU协议又称革奴计划,是由Richard Stallman在1983年9月27日公开发起的。它的目标是创建一套完全自由的操作系统。Richard Stallman最早是在net.unix-wizards新闻组上公布该消息,并附带《GNU宣言》等解释为何发起该计划的文章,其中一个理由就是要“重现当年软件界合作互助的团结精神”。为保证GNU软件可以自由地“使用、复制、修改和发布”,所有GNU软件都有一份在禁止其他人添加任何限制的情况下授权所有权利给任何人的协议条款,GNU通用公共许可证(GNU General Public License,GPL)。即“反版权”(或称Copyleft)概念。故Sun公司于2009年4月15日正式发布OpenJDK。甲骨文在 2010 年收购Sun之后接管了这个项目。

Oracle JDK只发布二进制安装包,而OpenJDK只发布源码。

学习openjdk的必要性

冯·诺依曼机原理

  • 计算机由运算器、控制器、存储器、输入设备和输出设备五部分组成。
  • 采用存储程序的方式,程序和数据放在同一个存储器中,指令和数据一样可以送到运算器运算,即由指令组成的程序是可以修改的。
  • 数据以二进制代码表示。
  • 指令由操作码地址码组成。
  • 指令在存储器中按执行顺序存放,由指令计数器指明要执行的指令所在的单元地址,一般按顺序递增,但可按运算结果或外界条件而改变。
  • 机器以运算器为中心,输入输出设备与存储器间的数据传送都通过运算器。

 由此我们得知计算机上设备的运行是需要二进制代码也就是0,1组合,而计算机处理运算的部分是运算器与控制器也就是现在的微处理器CPU,所以就有了机器码,机器码是给CPU下达指令的,机器识别很容易,而人通过机器码编程太过复杂,于是聪明的人类将机器码0001,0010这种二进制码映射成固定的符号,比如0001代表read,0010代表add,于是就有了汇编语言,汇编语言形成的操作指令就是CPU的操作指令,所以每个CPU都有自己的操作规范,于是就有了8086处理器,Intel 1978年推出的Intel 8086中央处理器中首度出现,它是从Intel 8008处理器中发展而来的,而8008则是发展自Intel 4004的。8086在三年后为IBM PC所选用,之后x86便成为了个人计算机的标准平台,成为了历来最成功的CPU架构。 

8086是16位处理器;后续有了32位的80386处理器,直到2003年AMD对于这个架构发展了64位的扩充,并命名为AMD64。后来Intel也推出了与之兼容的处理器,并命名为Intel 64。两者一般被统称为x86-64x64,开创了x86的64位时代。这里16位32位64位代表的是寄存器的个数。

一来基于x86架构形成的指令集对于人类还是太复杂,二来每个CPU在指令集上都会有所不同,这样基于某个CPU写出来的软件只能给特定的CPU使用,于是在基于x86架构的指令集上开始诞生了汇编语言,汇编语言对人还是不太友好,于是人类又发明高级语言,比如C , C++语言,这样高级语言和汇编语言直接映射指令集,于是在这种映射之间就诞生了编译器,这就是编译原理。

(source language)源程序→编译器 →目标机器代码程序(object code

后来人类又发明了面向对象的编程语言,这种语言更贴合人的思维逻辑,于是主角诞生了--java超高级语言

后来sun公司的程序猿通过JNI将JAVA,C,C++封装在一起就形成JDK,JNI是Java Native Interface的缩写,它提供了若干的API实现了Java和其他语言的通信(主要是C&C++)。于是在2009年,sun公司将jdk源码公布于众,openjdk就这样诞生了。

openjdk的编译

本人编译的是openjdk9

openjdk9源码地址http://hg.openjdk.java.net/jdk9

这是一个版本树,基于Mercurial搭建的一个代码托管平台,类似于github开源中国的码云

打开本地的centos7虚拟机,请确保本地电脑联网并且网速要很好。网速差就找个网速很好的地方,否则你会哭的。我已经哭过了。

yum install mercurial

下载openjdk9的编译指南项目源码,这个源码下都是需要编译和下载openjdk9源码的bash脚本和编译指南

openjdk9指南项目下载地址http://hg.openjdk.java.net/jdk9/jdk9/

点击zip下载到本地

然后解压zip包进入到\common\doc的目录下

用浏览器打开building.html并翻译成中文

然后根据指南开始你的表演

最好通过root权限登录centos7虚拟机

clone指南项目到/opt目录下 

hg clone http://hg.openjdk.java.net/jdk9/jdk9
cd jdk9
bash get_source.sh

请保持耐心等待源码下载完成

下载编译器,外部库和头文件

sudo yum groupinstall "Development Tools"

然后安装引导jdk8

sudo yum install java-1.8.0-openjdk-devel

运行配置参数

bash configure --with-target-bits=64 --disable-warnings-as-errors --with-debug-level=slowdebug --with-boot-jdk=/usr/jdk1.8.0_161

将这个--with-boot-jdk=/usr/jdk1.8.0_161修改为自己的jdk绝对路径

编译openjdk9源码

make images

 进入到根目录下将jdk环境变量修改成自己的路径./build/*/images/jdk/

vi /etc/profile
source /etc/profile
java -version

验证成功

现在开始openjdk9的调试吧!

© 著作权归作者所有

共有 人打赏支持
骰子红豆豆
粉丝 3
博文 4
码字总数 6110
作品 0
西安
程序员
Linux 安装python3.7.0

我这里使用的时centos7-mini,centos系统本身默认安装有python2.x,版本x根据不同版本系统有所不同,可通过 python --V 或 python --version 查看系统自带的python版本 有一些系统命令时需要...

宿夜孤妖
07/28
0
0
Mac OSX 10.10 Yosemite编译OpenJDK 9

在Mac OSX 10.10系统上编译了下OpenJDK9,以下仅是个人安装记录,供参考。 编译时间:2015-06-13 系统版本:Mac OS X Yosemite 10.10.4 编译OpenJDK版本:JDK 9 相关软件版本: XCode版本:X...

易水瑶
2015/06/13
0
2
手动制作mini linux详细步骤—之二

8.2.3、编译mini linux网卡驱动模块 对于网卡驱动,我们是通过在内核中设置为模块形式来动态加载,所以需要再次针对单个内核模块进行编译,编译单个内核模块使用如下命令: # cd /usr/src/li...

zzjiwang
2017/09/18
0
0
Jshell

一 、安装jdk9 方法一 sudo apt install openjdk-9-jdk-headless 方法二 下载jdk9: hg clone http://hg.openjdk.java.net/jdk9/jdk9 openjdk9 cd openjdk9 && sh ./get_source.sh # 编译 ba......

杜鹏程
2016/10/11
22
0
4412开发板学习笔记---Linux驱动的学习方法

转自迅为iTOP-4412开发板实战教程书籍:http://www.topeetboard.com 1. Linux驱动的学习方法 Linux内核中有上百个驱动,知识点多且杂,对于想学习驱动的同学来说,需要尽快掌握基础知识:如开...

歌之王子殿下
2016/06/28
260
0

没有更多内容

加载失败,请刷新页面

加载更多

计算卷积神经网络浮点数运算量

前言 本文主要是介绍了,给定一个卷积神经网络的配置之后,如何大概估算它的浮点数运算量。 相关代码:CalFlops,基于MXNet框架的 Scala 接口实现的一个计算MXNet网络模型运算量的demo。 正文...

Ldpe2G
今天
1
0
Sql语言与MySql数据库

1. 数据库简介 1. 数据库,就是存储数据的仓库,只能通过sql语言来访问,数据库也是一个文件系统。通常,MySQL、Oracle等数据库,也被称为关系型数据库,其保存的不仅仅只是数据,还包括数据...

江左煤郎
今天
1
0
IDEA 取消自动import .*

打开设置 > Editor > Code Style > Java > Scheme Default > Imports ① 将 Class count to use import with "*" 改为 99 (导入同一个包的类超过这个数值自动变为 * ) ② 将 Names count ......

乔老哥
今天
3
0
PostGIS学习笔记(开篇)

PostGIS事实上算是笔者开始写博客的第一篇内容。而事实上那篇博文的内容并不丰富,笔者对PostGIS的了解仍然不多,然而17年在OSGeo课程学习时对PostGIS又有了进一步了解,并逐步发现它的强大。...

胖胖雕
今天
3
0
【Centos】在nginx服务器中配置php和mysql

接上一章《【Centos】利用Vultr服务器和namesilo布网》(https://my.oschina.net/u/3776619/blog/2051986),在Centos中配置好nginx,并在iptables中开启了80端口,和为了远程mysql操作方便开...

yongh701
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部