网上很多人都是在64位机器下进行编译,32位的很少。
1. 从官网下载源码包openjdk-7u40-fcs-src-b43-26_aug_2013.zip
2. 安装依赖包
gcc、g++、make等是安装好系统之后就安装的。
编译用的脚本:
**********************************************************************
#!/bin/bash#语言选项,必须设置。
export LANG=C
#Bootstrap JDK的安装路径。必须设置。
#export ALT_BOOTDIR=/usr/lib/jvm/java-7-openjdk-i386
#export ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk-i386/
export ALT_BOOTDIR=/home/scorpius/Softwares/jdk1.7.0_45
#允许自动下载信赖
export ALLOW_DOWNLOADS=true
#并行编译的线程数,设置为和CPU内核数量一致。
export HOTSPOT_BUILD_JOBS=2
export ALT_PARALLEL_COMPILE_JOBS=2
#
export SKIP_COMPARE_IMAGES=true
#使用预编译头文件,不加这个编译会更慢一些
export USE_PRECOMPILED_HEADER=true
#要编译的内容
export BUILD_LANGTOOLS=true
#export BUILD_JAXP=false
#export BUILD_JAXWS=false
export BUILD_CORBA=true
export BUILD_HOSTPOT=true
export BUILD_JDK=true
#要编译的版本
#export SKIP_DEBUG_BUILD=false
#export SKIP_FASTDEBUG_BUILD=true
#export DEBUG_NAME=all_fastdebug
#把它设置为false可以避开javaws和浏览器Java插件之类的部分的build
BUILD_DEPLOY=false
#把它设置为false就不会build出安装包。因为安装包里有些奇怪的信赖,
#但即便不build出它也已经能得到完整的JDK映像,所以还是别build它好了。
BUILD_INSTALL=false
#编译结果所存放的路径
#export ALT_OUTPUTDIR=/home/scorpius/Softwares/openjdk/build
unset JAVA_HOME
#unset CLASSPATH
unset LD_LIBRARY_PATH
#source jdk/make/jdk_generic_profile.sh
make 2>&1 | tee build.log
#make sanity
**********************************************************************
编译过程中遇到的主要问题:
缺少类库的问题就不列出来了,缺什么补什么好啦。
1. 编译hotspot的时候会遇到warnings being treated as errors之类的提示信息,可以直接在
/hotspot/make/linux/makefiles/gcc.make中把WARNINGS_ARE_ERRORS = -Werror这行注掉
2. Unable to load native library: libjvm.so: cannot open shared object file: No such file or directory
之前用的是openjdk7,尝试了网上的各种办法,都没有解决。
怀疑可能是jdk的问题,换了Oracle的JDK7,同时在脚本里又加了一句“unset LD_LIBRARY_PATH”,竟然一路顺风,编译成功。
不知道能不能省略其中之一,没有验证过。