JAVA虚拟机学习1---OpenJDK的编译

来源:互联网 发布:手机crm软件 编辑:程序博客网 时间:2024/04/29 09:21

-------《C++编程思想》编程准则1:首先让程序运行,然后追求速度。即使我们确定这一段程序非常重要,而且是我们系统中的瓶颈。不要优化,首先用尽可能简单的设计使程序可以运行,如果速度不满足要求,再对其进行分析。我们总是能够发现“我们的”瓶颈并不是问题所在,节省我们的时间做真正有意义上的事。


                                OpenJDK的编译


  一 OpenJDK

      OpenJDK是JDK的开放源码版本,是java语言的发明公司Sun Microsystems. Inc,成立的一个开源项目。由于版本关系,导致openJdk源代码不完整,所以它的功能要远少于SUN JDK,不包含:Brower Plugin,Java web Start,以及java控制面板,这些功能在OpenJDk中是找不到的,这些不能开往的源代码,以插件的形式提供给OpenJDK编译时使用,OpenJDK6的时候,Icedtea项目给它这些不完整的部分开发了相同功能的源代码。开始和SunJDK一样完整。另外注意的是,OpenJDK只包含最精简的JDK,如果使用Icetea补丁的OpenJDK, openJDK 命令“java -version”显示的不是OpenJDK,而是java.


二 安装环境准备

     本文选用的是在virtualbox中,使用ubuntu 14.04 32位版本镜像,主系统是ubuntu 16.04 64位,为什么我本来真机就是ubuntu ,还要安装个虚拟机?闲得慌?这个后面说。使用linux系统(ubuntu)进行构建,是相当方便的,天生具备各种工具链,如果使用window,要到处找c++编译器,以及各种缺失的编译所要的工具包和编译环境,安装一个普通jdk,或者openjdk到系统上,配置好JAVA_HOME,JRE_HOME,CLASSPATH。这是我的配置:
 export JAVA_HOME=/opt/jdk export JRE_HOME=${JAVA_HOME}/jre export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
为什么要安装一个新的JDK在机器上,后面有说

三 安装步骤

  源代码下载有两种方式,A是直接下整包源代码 B 使用OPENJDK 官方提供的工具Mercurial(hg)类似git进行下载
A 直接下整包源代码,好处是快方便省事,不好的地方是看不到官方修改的release not.不过,还是建议用这种方式,因为B方式,有很多时候,是下载不下来的,不知道原因。
  直接到网址:http://download.java.net/openjdk/jdk8/

B 使用Mercurial(hg).下载
  OpenJDK的源文件版本库基于Mercurial(hg),它是一个与Git相似的分布式版本控制工具。在Ubuntu中安装Mercurial只需要执行命令
 ---安装版本管理工具
1)  $ sudo apt-get install mercurial -y
---下载OpenJDK 框架    
2)  $ hg clone http://hg.openjdk.java.net/jdk8u/jdk8u-dev/ jdk8-src
---进入框架目录
3)  $ cd jdk8-src
----OpenJDK的源代码版本库实际上包含多个独立的子版本库,需要执行如下脚本去分别下载各个子版本库的源代码,

4)  $ sh get_source.sh
# Repositories:  corba jaxp jaxws langtools jdk hotspot nashorn
    ....
         

四 构建

    1) 设置环境变量

    首先,要说一下,构建openJDK要一个药引,这个药引叫boot jdk,这个工具一般已经集成在普通的jdk中了,所以,安装一个普通的JDK到系统上,然后配置好环境变量就好。然后继续在.bashrc 里边添加以下变量。

    

export USE_PRECOMPILED_HEADER=trueexport SKIP_DEBUG_BUILD=false  export SKIP_FASTDEBUG_BUILD=true  export DEBUG_NAME=debug   export LANG=C   unset CLASSPATH  unset JAVA_HOME

  2) 配置编译环境

   $ sh configure 或者 bash configure
该过程会检测构建环境是否符合要求,如有问题,它会给出提示。比如,
configure: error: Could not find X11 libraries. You might be able to fix this by running 'sudo apt-get install libX11-dev libxext-dev libxrender-dev libxtst-dev libxt-dev'.
后面可能,大部分还有继续安装的缺失的工具,都可以通过提示apt安装即可。每次安装完毕,再次重新执行上述configure命令,直到没有报错为止。不要使用apt安装ccashe,ubuntu的软件库里,这个软件太旧了。


   3) 安装高速C/C++编译工具(ccache)  

   https://ccache.samba.org/
   在处理一些规模相对较大的工程时,编译花费的时间可能会很长。有时候我们会经常一遍一遍地编译相同的程序,此时,有了ccache情况就好多了。它将在第一遍编译时多花几秒钟,但接下来就会使编译成倍(5-10倍)的提速。
   下载源码包后,解压缩,进入包。执行以下命令:
    $./configure
    $make
    $make install
    $sudo cp ccache /usr/local/bin/
    $sudo ln -s ccache /usr/local/bin/gcc
    $sudo ln -s ccache /usr/local/bin/g++
    $sudo ln -s ccache /usr/local/bin/cc
    $sudo ln -s ccache /usr/local/bin/c++

 4) 回到openJDK源码包内进行构建执行以下命令

    $make all DEBUG_BINARIES=true
    接下来就是慢长的等待,快的20分钟,我的由于是虚拟机,机器cpu又比较慢,用了40分钟。

     完成后,在当前路径下会生成一个build目录,构建好的JDK就在那里面。新JDK的具体路径类似于build/linux-x86-normal-server-release/jdk/bin。可以执行如下命令去测试这个JDK,这是我修改了JVM后,加入了自己的名字定制的,哈哈。


 

五 后记:

      当时我的机器是ubuntu 16.04 64位,不论怎么构建,都出错,google了一下,没有碰到中国人有说到过这问题,只发现2013年-2014年有几个老外的贴提起过,其中是一个是debian系统的测试员,今天我还特地写了信问他,不知道这个人离职没有。。。。下面这个link是debian的bug系统里那个问题,也是我碰到的问题。
  https://lists.debian.org/debian-java/2014/05/msg00024.html
      所以,最后,我只能在ubuntu 里边使用虚拟机,重新安装了一个32位的低版本的14.04,然后就没问题了。可能是g++过高?

  

续:

       后电脑重装ubuntu 14.04 64位,全程无问题。看来编译OpenJdk实在很挑剔环境。


 


0 0
原创粉丝点击