linux环境下编译jdk7u-dev
系统版本:
CentOS Linux release 7.3.1611 (Core)
CPU:
1 Intel® Xeon® CPU E5-26xx v4
步骤:
准备工作:
安装依赖:
yum install -y mercurial
yum install -y ant ant-nodeps
yum install -y libX11* libX*
yum install -y libXi-devel libXtst-devel libXt-devel freetype*
yum install -y alsa-lib-devel cups-devel
yum install -y gcc gcc-c++
下载需要编译的jdk:
hg clone http://hg.openjdk.java.net/jdk7u/jdk7u-dev
cd jdk7u-dev
chmod 755 get_source.sh
./get_source.sh
调整编译参数:
#语言选项,这个必须设置,否则编译好后会出现一个HashTable的NPE错
export LANG=C
#Bootstrap JDK的安装路径。必须设置
export ALT_BOOTDIR=/jvm/jdk1.7.0_80
#允许自动下载依赖
export ALLOW_DOWNLOADS=true
#并行编译的线程数,设置为和CPU内核数量一致即可
export HOTSPOT_BUILD_J0BS=1
export ALT_PARALLEL_COMPILE_JOBS=1
#比较本次build出来的映像与先前版本的差异。这对我们来说没有意义,
#必须设置为false,香则sanity检查会报缺少先前版本JDK的映像的错误提示。
#如桌已经设置dev或者DEV_ONLY=true,这个不显式设置也行
export SKIP_COMPARE_IMAGES=true
#使用预编译头文件,不加这个编译会更慢一些
export USE_PRECOMPILED_HEADER=true
#要编译的内容
export BUILD_LANGTOOLS=true
#export BUILD_JAXP=false
#export BUILD_JAXWS=fa1se
#export BUILD_CORBA=false
export BUILD_HOTSPOT=true
export BUILD_JDK=true
#要编译的版本
#export SKIP_DEBUG_BUILD=false
#export SKIP_FASTDEBUG_BUILD=true
#export DEBUG_NAME=debug
#把它设置为false可以避开javaws和浏览器Java插件之类的部分的build
BUILD_DEPLOY=false
#把它设置为false就不会build出安装包。因为安装包里有些奇怪的依赖,
#但即便不build出它也已经能得到完整的JDK映像,所以还是别build它好了
BUILD_INSTALL=false
#编译结果所存放的路径
export ALT_OUTPUTDIR=/jvm/jdk7u-dev/build
#这两个环境变量必须去掉,不然会有很诡异的事情发生(我没有具体查过这些 "诡异的
#事情” ,Makefile脚本裣查到有这2个变量就会提示警告)
unset JAVA_HOME
unset CLASSPATH
. VAR 配置参数
重要步骤!!!:
调整swap分配区域,因为服务器是一核2G的云服务器,编译时会cpu直接占满百分之百,若swap区域不足会导致编译失败
dd if=/dev/zero of=/tmp/mem.swap bs=1M count=4096
mkswap /tmp/mem.swap
swapon /tmp/mem.swap
开始编译
make sanity
若检查通过则
make
等待成功
笔者所用服务器用时1小时20min…
完成后修改java home 等环境变量,并卸载之前的环境变量
rm -f /usr/bin/java
rm -f /usr/bin/javac
rm -f /etc/alternatives/java
rm -f /etc/alternatives/javac
之后使配置生效
source /etc/profile
查看java版本,编译成功
[root@VM_0_2_centos ~]# java -version
openjdk version "1.7.0-internal"
OpenJDK Runtime Environment (build 1.7.0-internal-root_2018_11_26_11_35-b00)
OpenJDK 64-Bit Server VM (build 24.80-b07, mixed mode)
可能出现的错误:
/usr/bin/ld: cannot find -lstdc++
collect2: error: ld returned 1 exit status
解决方法:
yum install libstdc++-devel.x86_64 libstdc++.x86_64 compat-libstdc++-33.x86_64 libstdc++-static.x86_64