linux内核:uname -r 查看linux内核,我的是 3.11.0-15-generic
1.下载openjdk7源码
a.openJDK7源码地址:http://download.java.net/openjdk/jdk7/
另外openJDK8源码地址:http://download.java.net/openjdk/jdk8/
2.安装编译openJDK所需到依赖:
sudo aptitude build-dep openjdk-6 --安装编译openjdk-6所需到环境,里面包含了很多工具
sudo aptitude install openjdk-6-jdk --安装openjdk,编译openjdk源码中到java部分
3.设置编译openJDK的环境变量:
export LANG=C
#设置本机上安装好到openjdk来编译源码,用java -ersion可以查看到本机jdk到版本信息
export ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk
#允许在编译的时候自动进行下载依赖的东西
export ALLOW_DOWNLOADS=true
#使用预编译头文件,不是用这个会编译慢些
export USE_PRECOMPILED_HEADER=true
#设置编译好的openjdk 输出位置
export ALT_OUTPUTDIR=/users/openjdkbuild
#The default hotspot-build is all_product. Setting DEBUG_NAME would change the target.
export DEBUG_NAME=debug
unset JAVA_HOME
unset CLASSPATH
4.使用cd命令进入openjdk源码目录下
5.make sanity 测试一下
如果出现:Sanity check passed.则表示测试编译通过了,不过也别开心得太早,真正make的时候不保证一定没问题
6.make
FQA:
1. ERROR: error: "__LEAF" redefined [-Werror]
这个是已知的bug(http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot/rev /a6eef545f1a2), 在hopspot下打入该patch(http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot /raw-rev/a6eef545f1a2)即可
或者:从http://hg.openjdk.java.net/hsx/hotspot-comp/hotspot /raw-rev/a6eef545f1a2 这个页面下载zip替换openjdk7源码中到hotspot文件夹(注意将下载的文件夹名改为hotspot)
2. ERROR: echo "*** This OS is not supported:" 'uname -a'; exit 1;
这是由于内核版本太高了,两种方式解决:
方法一:
lichengwu@s4:~/bin$ uname -r
#查看当前的内核版本:
3.2.0-20-generic
修改文件/home/thebye85/jdk7/hotspot/make/linux/Makefile
#在这行最后加上当前的内核版本3.2%,如下:
lichengwu@s4:~/bin$ SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 2.7% 3.2%
方法二:
gedit 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
3.sound错误
修改jdk/make/javax/sound/jsoundalsa/下的Makefile文件,将
LDFLAGS += -lasound
改成
EXTRA_LIBS += -lasound
否则编译出错
4.make[5]: *** [/home/ubuntu/openjdkbuild/lib/i386/libjsoundalsa.so] Error 1
解决:(注意openjdkbuild是编译的jdk输出路径)
ln -s lib/i386/libjsound.so lib/i386/libjsoundalsa.so
如果ln不行 就用cp