解压压缩包,将得到openjdk文件夹
unzip openjdk-7u40-fcs-src-b43-26_aug_2013.zip
cd openjdk
这里有一份构建说明文档README-builds.html ,建议在windows下面看。后面步骤全靠它了。
2.2 下载依赖
具体的依赖要求说明都在README-builds.html 中了,这里直接来命令:
# yum install -y glibc*
# yum install cups-devel
# yum install -y alsa*
# yum install -y fontconfig*
# yum install zip*
# yum install libstdc++-static
安装freetype
下载源码
解压源码,编译安装
# tar -zxvf freetype-2.3.12.tar.gz
# cd freetype-2.3.12
# ./configure && make && sudo -u root make install
下载并安装ANT
配置ANT环境变量
# vi /etc/profile
加入如下内容:
export ANT_HOME=/opt/openJDKroom/apache-ant-1.9.6
export PATH=$PATH:$ANT_HOME/bin
# source /etc/profile
下载并安装CUPS
tar -jxvf cups-2.1.2-source.tar.bz2
# ./configure && make && make install
2.3 屏蔽已经配置的JAVA_HOME
下面贴出README-builds.html中原文:
# env | grep JAVA_HOME
如果有则屏蔽掉。
2.4 配置引导JDK
下面贴出README-builds.html中原文:
下载安装Bootstrap
这里下载JDK 6 Linux 64位jdk-6u45-linux-x64.bin
# chmod +x jdk-6u45-linux-x64.bin
# ./jdk-6u45-linux-x64.bin
安装完毕后,当前目录下会生成jdk1.6.0_45目录,配置ALT_BOOTDIR环境变量为该目录路径。在/etc/profile中增加如下配置(以实际为准):
export ALT_BOOTDIR=/opt/openJDKroom/jdk1.6.0_45
# source /etc/profile
2.5 配置环境变量ALT_CACERTS_FILE
进入openjdk目录中,查找名称为cacerts的文件:
# cd openjdk
# find ./ -name cacerts
显示结果如下:
[root@localhost openjdk]# find ./ -name cacerts
./jdk/src/share/lib/security/cacerts
打开/etc/profile,将以下内容加入(具体路径根据实际情况):
export ALT_CACERTS_FILE=/opt/openJDKroom/openjdk/jdk/src/share/lib/security/cacerts
3.开始编译
终于要开始编译了!>_<
README-builds.html中用的是gmake,实际和make是一样的,下面是解释:
进入到openjdk根目录下,进行编译
cd /opt/openJDKroom/openjdk
gmake sanity
gmake
结果执行报错:
gmake[6]: Entering directory `/opt/openJDKroom/openjdk/build/linux-amd64/hotspot/outputdir/linux_amd64_compiler2/product'
gmake[6]: stat: libjvm.so: Too many levels of symbolic links
进入到/opt/openJDKroom/openjdk/build/linux-amd64/hotspot/outputdir/linux_amd64_compiler2/product目录下有下面链接:
libjvm.so->libjvm.so
libjvm.so.1->libjvm.so
明显是由于libjvm.so->libjvm.so引起的(可以自己做一个实验,不要创建文件,直接执行ln -s file file ,然后cat file就会报这个错)
知道了问题所在,就要给它引用一个真实的so文件。通过find /opt -name libjvm.so命令查找存在该文件的地方,将libjvm.so->libjvm.so指向真实文件位置。即:
# rm -f libjvm.so
# ln -s 具体libjvm.so文件完成路径 libjvm.so
再次执行gmake。
结果报以下错:
Error: time is more than 10 years from present: 1136059200000
java.lang.RuntimeException: time is more than 10 years from present: 1136059200000 at build.tools.generatecurrencydata.GenerateCurrencyData.makeSpecialCaseEntry(GenerateCurrencyData.java:285) at build.tools.generatecurrencydata.GenerateCurrencyData.buildMainAndSpecialCaseTables(GenerateCurrencyData.java:225) at build.tools.generatecurrencydata.GenerateCurrencyData.main(GenerateCurrencyData.java:154) 经过查询发现这是一个BUG.....
下面介绍了对应补丁的出处
下面有关于问题原因探讨描述
如果不想仔细看可以直接访问补丁网址:
将其中的文件内容拷贝下来覆盖到对应文件中。
继续gmake
终于编译成功了!!!
出现下面提示就说明编译完成了
#-- Build times ----------
Target all_product_build
Start 2016-01-10 11:18:43 End 2016-01-10 11:52:15 00:00:15 corba 00:00:21 hotspot 00:00:11 jaxp 00:00:20 jaxws 00:32:15 jdk 00:00:10 langtools 00:33:32 TOTAL -------------------------
4.跑一下自己编译的虚拟机
进入目录
/opt/openJDKroom/openjdk/build/linux-amd64/hotspot/outputdir/linux_amd64_compiler2
下面有好几种优化级别的编译版本:
drwxr-xr-x. 2 root root 4096 Jan 9 16:53 debug
drwxr-xr-x. 2 root root 4096 Jan 9 16:53 fastdebug drwxr-xr-x. 7 root root 4096 Jan 9 16:56 generated drwxr-xr-x. 2 root root 4096 Jan 9 16:53 jvmg drwxr-xr-x. 2 root root 4096 Jan 9 16:53 optimized drwxr-xr-x. 3 root root 20480 Jan 10 11:19 product drwxr-xr-x. 2 root root 4096 Jan 9 16:53 profiled -rw-r--r--. 1 root root 1518 Jan 9 16:53 shared_dirs.lst
进入到product目录中。
这里要在env.sh配置下环境变量,指向共享库
LD_LIBRARY_PATH=.:${JAVA_HOME}/jre/lib/amd64/native_threads:${JAVA_HOME}/jre/lib/amd64:/opt/openJDKroom/openjdk/build/linux-amd64/hotspot/outputdir/linux_amd64_compiler2/product 下面贴出我这个文件的完整内容:
下面执行: # source ./env.sh # ./gamma -version Using java runtime at: /opt/openJDKroom/openjdk/build/linux-amd64/j2sdk-image/jre 运行成功!! 希望对想要编译openJDK的朋友有个参考。如果有疑问请提出,大家一起学习探讨。>_<
|
|