《深入理解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
在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命令中带有用户的机器名。