《深入理解Java虚拟机》第一章介绍了自己编译JDK,倒腾了半天,遇到的问题不少。这里写下在Ubuntu下编译OpenJDK7的操作过程。

参考的博客:

http://blog.csdn.net/u011521890/article/details/52197723

http://lc87624.iteye.com/blog/1542354

http://blog.csdn.net/lego2816/article/details/48807709


1、系统环境准备和版本

1)下载VMware,Ubuntu16.04,进行Ubuntu虚拟机的安装

2)window中下载openjdk7的源码:http://download.java.net/openjdk/jdk7/  解压后上传到Ubuntu中(这里利用pscp.exe上传)

3)window中下载jdk-6u45-linux-i586.bin ,Ubuntu中建立目录:mkdir /usr/java 并将JDK上传到这个目录下(编译OpenJDK中的java代码需要用到一个可用的JDK)。在Linux下安装JDK参考:http://blog.csdn.net/gobitan/article/details/24322561


2、下载编译OpenJDK的依赖项

安装gcc、g++、make等
sudo apt-get install build-essential    
安装ant 1.7以上
sudo apt-get install ant
安装XRender
sudo apt-get install libxrender-dev
sudo apt-get install xorg-dev
安装alsa
sudo apt-get install libasound2-dev (daozhe)
Cups
sudo apt-get install libcups2-dev
安装零碎的工具包
sudo apt-get install gawk zip libxtst-dev libxi-dev libxt-dev


3、环境变量的设置:

       在openjdk根目录下,建脚本文件:touch enviornments_set.sh


        

       设置脚本权限#chmod 755 enviornments_set.sh,执行脚本:./enviornments_set.sh

       环境变量设置完后,输入make sanity检查之前做的设置是否全部正确。


4、开始编译

         输入make指令,发现一堆问题,一个一个来解决:

1)OS Version is not supported

       无法通过hotsopt的系统版本检查,需要修改openjdk/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
 


2)__LEAF redefined

      g++的高版本中,增加了对__LEAF的定义,而openJDK源代码中也有__LEAF定义。对于这个bug,可以参考下面链接进行修改:http://hg.openjdk.java.net/hsx/hsx23/hotspot/rev/a6eef545f1a2


3)遇到和"javax/sound/jsoundalsa"相关的一个错误,需要修改openjdk/jdk/make/javax/sound/jsoundalsa目录下的Makefile文件,找到 LDFLAGS += -lasound   修改为 OTHER_LDLIBS += -lasound


4)Error/openjdk/hotspot/src/share/vm/oops/constantPoolOop.cpp:272:39: error: converting 'false' to pointer type 'methodOop' [-Werror=conversion-null]

             将return false 改为return NULL

5)error:unrecognized command line option '-mimpure-text'

         修改 /openjdk/jdk/make/common/shared/Compiler-gcc.gmk     将-mimpure-text去掉


6)< ../../../src/share/classes/java/util/CurrencyData.properties Error: time is more than 10 years from present: 

       进入openjdk/jdk/src/share/classes/java/util/CurrencyData.properties中,将年份修改下。将2004改为2014,2005改为2015,2006改为2016就可以。


5、编译成功



6、查看编译成功后的JDK版本

          进入openjdk/build/bin目录,输入./java -version   


         编译出来的虚拟机,在-version命令中带有用户的机器名。


       


Logo

更多推荐