编译OpenJdk
下载和配置环境
本人使用 ubuntu-12.04.5-alternate-i386.iso
下载OpenJdk源代码
http://openjdk.java.net/
直接下载地址:http://download.java.net/openjdk/jdk7u40/promoted/b43/
构建编译环境
sudo apt-get install build-essential gawk m4 openjdk-6-jdk libasound2-dev libcups2-dev libxrender-dev xorg-dev xutils-dev x11proto-print-dev binutils libmotif3 libmotif-dev ant
Loaded plugins: fastestmirror, refresh-packagekit
以上环境依赖下载完之后,最好能安装下gcc4.4或则以上的版本,和G++
设置环境变量
在解压的根目录中新创建一个shell脚本,方便执行编译。
然后用 make sanit 命令来验证变量是否配置正确。如果运行完成之后,最后一行是 Sanity check passed. 则环境变量配置正确了(由于本人对linux不太熟悉,make sanit命令的话,shell脚本又没有被执行,貌似设置的环境变量都没有生效?这个直接开始编译就好)
#!/bin/sh
#(必配置项)设定语言选项#
export LANG=c
#(必配置项)设置编译该OpenJdk的Jdk目录,用OpenJdk如果出错,就用oracle的jdk代替#
export ALT_BOOTDIR=/usr/lib/jvm/java-6-openjdk
#允许在编译过程中自动下载相关依赖#
export ALLOW_DOWNLOADS=true
#并行编译策略时的线程数量开启#
export HOST_BUILD_JOBS=4
#使用预编译头文件,加速编译#
export USE_PRECOMPILED_HEADER=true
#编译内容,如果不设置,则编译OpenJdk中的所有内容,耗时太长#
export BUILD_LANGTOOLS=true
export BUILD_JAXP=true
export BUILD_JAXWS=true
export BUILD_CORBA=true
export BUILD_HOTSPOT=true
export BUILD_JDK=true
BUILD_INSTALL=false
#编译后的存储路径#
export ALT_OUTPUTDIR=/home/jvm/openjdk7/build
#忽略经过信息?#
WARNINGS_ARE_ERRORS=true
#把构建日志放入指定的log中,但是要先创建该文件目录#
make 2>&1 | tee /home/jvm/openjdk7/build-log/openjdk.log
开始编译
开始编译命令:用sudo bash fileName.sh 来执行脚本。(一定要是root权限sudo)
#-- Build times ----------
Target all_product_build
Start 2015-05-23 20:20:58
End 2015-05-23 20:35:09
00:00:05 corba
00:00:11 hotspot
00:00:02 jaxp
00:00:02 jaxws
00:13:48 jdk
00:00:03 langtools
00:14:11 TOTAL
-------------------------
make[1]: Leaving directory `/home/jvm/app/openjdk'
出现以上界面,就表示已经编译完成了
sh脚本中配置的ALT_OUTPUTDIR目录,就是已经编译好的jdk,进入该目录中的bin,运行以下命令查看我们自己编译好的jdk版本
./java -version
编译失败问题
1 . Unable to load native library: /home/mengxiansen/program/java/jdk1.7.0_10/jre/lib/amd64/libjava.so: symbol JVM_SetNativeThreadName, version SUNWprivate_1.1 not defined in file libjvm.so with link time reference
出现以上问题,可以尝试使用使用Oracle的jdk6代替jdk7编译openjdk
2 . 替换成oracle的jdk之后,出现Error: time is more than 10 years from present: 1104530400000,把以下文件中的时间修改成2010年
如果没有找到该文件,就全盘搜索
/proc/2541/cwd/jdk/src/share/classes/java/util/CurrencyData.properties
534 # TURKEY
535 TR=TRL;2010-12-31-22-00-00;TRY