编译jdk的二三事

最近逐渐的闲下来,边准备毕业论文边学习一些知识,研读一下《深入理解JAVA虚拟机》(后称“深入”),首先,需要编译JDK,本人是在UBUNTU 14.04上进行的编译过程,由于是第一次进行jdk编译,有很多不懂的地方,也遇到了很多问题,现记录在此,以备查询。

说在前方:本人的linux系统安装在闲置下来的笔记本中,使用windows和ubuntu双系统,在台式机中通过xshell6远程连接ubuntu进行文件的传输,将所有文件均传入/home/wpc(即 ~目录)。

采用顺序记录的方法,将遇到的问题和ERROR放在文章的最后。

主要的步骤参考https://blog.csdn.net/dh_sir/article/details/63442191此篇文章。

系统:Ubuntu 14.04 ,openjdk版本为7u75,下载网址为https://download.java.net/openjdk/jdk7u75/ri/openjdk-7u75-src-b13-18_dec_2014.zip,系统的基础jdk版本为jdk1.6.0_45(作为ALT_BOOTDIR使用,因为jdk中有部分代码为java所编写,基础jdk版本不能低于1.6),下载地址为:http://download.oracle.com/otn/java/jdk/6u45-b06/jdk-6u45-linux-x64.bin

在获取openjdk-7u75版本的jdk源码后,需要对其进行解压操作,主要操作命令为

cd ~
unzip openjdk-7u75-src-b13-18_dec_2014.zip

安装编译jdk所需的依赖

尽量切换root用户权限,以免发生权限不足等问题。

将前述jdk1.6版本的安装包复制到 /usr/lib/jvm,

mkdir /usr/lib/jvm
cp /home/wpc/jdk-6u45-linux-x64.bin /usr/lib/jvm

更改该文件的权限,并运行安装

chmod +x jdk-6u45-linux-x64.bin
./jdk-6u45-linux-x64.bin

进行java环境变量的配置

gedit /etc/profile

在文件的最后添加如下所示的命令:(一定要注意字母的大小写)

export JAVA_HOME=/usr/lib/jvm/jdk1.6.0_45   
export JRE_HOME=${JAVA_HOME}/jre  
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib  
export PATH=${JAVA_HOME}/bin:$PATH

使配置文件生效:

source /etc/profile
#可以查看java版本来看配置是否生效
#命令如下:
java -version

启动jdk配置完毕,,下面进行各依赖的安装:(本人采用了《深入》书中的对于ant依赖的处理,而上述参考文章中为单独配置ant,可能是我的配置不对的原因,在使用的过程中并不能找到配置好的ant)

sudo apt-get install build-essential gawk m4 libasound2-dev libcups2-dev 
libxrender-dev xorg-dev xutils-dev x11proto-print-dev binutils libmotif3 
libmotif-dev python python-all-dev python-setuptools ant
sudo easy_install -U mercurial

依赖安装完毕后,进行编译过程中的部分参数设定,参照前述文章与《深入》中的参数设置:

#语言选项,这个必须设置,否则编译好后会出现一个HashTable的NPE错
export LANG=C

#Bootstrap JDK的安装路径。必须设置
export ALT_BOOTDIR=/usr/lib/jvm/jdk1.6.0_45

#允许自动下载依赖
export ALLOW_DOWNLOADS=true

#并行编译的线程数,设置为和CPU内核数量一致即可(由于本人的机器较为老旧
#因此采用了4的数量,请大家依据自己的实际情况设置)
export HOTSPOT_BUILD_JOBS=4
export ALT_PARALLEL_COMPILE_JOBS=4

#比较本次build出来的映像与先前版本的差异。这对我们来说没有意义,
#必须设置为false,否则sanity检查会报缺少先前版本JDK的映像的错误提示。
#如果已经设置dev或者DEV_ONLY=true,这个不显式设置也行
export SKIP_COMPARE_IMAGES=true

#使用预编译头文件,不加这个编译会更慢一些
export USE_PRECOMPILED_HEADER=true

#要编译的内容
#该部分前述参考的文章中对涉及到
#JAXP\JAXWS\CORBA=false三部分未采用
#具体原因,还未细究,暂且记录
export BUILD_LANGTOOLS=true
export BUILD_HOTSPOT=true
export BUILD_JDK=true

#在书中的要编译的版本中
#还存在三条命令,文章中也未采用
#本人也未采用,暂且记录

#把它设置为false可以避开javaws和浏览器Java插件之类的部分的build
BUILD_DEPLOY=false

#把它设置为false就不会build出安装包。因为安装包里有些奇怪的依赖,
#但即便不build出它也已经能得到完整的JDK映像,所以还是别build它好了
BUILD_INSTALL=false

安装freetype(版本需为2.3.0版本以上,否则无法进行编译,会发生编译前的依赖检查错误):

本人从freetype官网进行下载,网址为:https://www.freetype.org/download.html,直接下载最新版本的freetype,将freetype安装包进行解压

#首先创建一个存放文件的目录
mkdir /home/wpc/freetype
#将文件复制进入刚才创建的目录
cp /home/wpc/freetype-2.4.10.tar.gz /home/wpc/freetype
cd /home/wpc/freetype
tar -zxvf freetype-2.4.10.tar.gz 
#解压完成后进行配置、编译、安装
cd freetype-2.4.10
./configure
make
make install

安装完成后执行以下命令:

sudo ln -s /usr/local/include/freetype2/freetype /usr/local/include/freetype

然后对配置文件进行编译:

gedit /etc/profile

#在最后插入以下命令
export ALT_FREETYPE_HEADERS_PATH=/usr/local/include
export FREETYPE_HEADERS_PATH=/usr/local/include
export ALT_FREETYPE_LIB_PATH=/usr/local/lib
export FREETYPE_LIB_PATH=/usr/local/lib
export FREETYPE_HOME=/usr/local/freetype
export PATH=$PATH:$FREETYPE_HOME/bin

#此处如果在编译过程发生错误
#请参照自己的问题进行具体路径的改写,
#因本人与文章中一致就发生错误
#又重新分析后改写为上述路径
sourece /etc/profile

至此,安装前的准备工作已经完成,进行检查:

unset CLASSPATH
unset JAVA_HOME
#上边两条命令一定需要执行
cd /home/wpc/openjdk
make sanity

若检查通过则出现如下所示图片:(本图出自https://blog.csdn.net/dh_sir/article/details/63442191

检查通过后使用make命令进行编译,编译成功后会显示下图:

通过如下命令检查是否编译成功:

cd /home/wpc/openjdk/linux-amd64/bin
./java -version

显示如下内容:

下面为遇到的错误及解决方法:

1、缺少freetype,且版本需为2.3.0以上

答:已经在安装步骤中插入freetype的安装,安装并设置后即可解决该问题。

2、time is more than 10 years from present(版本过于老旧,时间超过10年限制,解决方法参照https://blog.csdn.net/abountwinter/article/details/52369507中提供的解决办法)

答:(修改的时间应该距你现在编译jdk的时间不超过10年,酌情修改,本人编译时间为2019/03/26)

修改CurrencyData.properties(路径:~/openjdk/jdk/src/share/classes/java/util/CurrencyData.properties)
修改108行
AZ=AZM;2009-12-31-20-00-00;AZN
修改381行
MZ=MZM;2009-06-30-22-00-00;MZN
修改443行
RO=ROL;2009-06-30-21-00-00;RON
修改535行
TR=TRL;2009-12-31-22-00-00;TRY
修改561行
VE=VEB;2010-01-01-04-00-00;VEF

猜你喜欢

转载自blog.csdn.net/qq_34921492/article/details/88831753