Linux Mint 17.3 Rosa下JDK编译

来源:互联网 发布:win7下装linux双系统 编辑:程序博客网 时间:2024/05/22 01:52

通过《深入理解Java虚拟机:JVM高级特性与最佳实践(第三版)》的学习,觉得有很多细节需要注意,特此记录以备不时的参考之需

 

Linux Mint 17.3 RosaJava虚拟机(HOTSPOT)源代码编译步骤

 

概述

1.        hotspot源代码包含在openJDK7

2.        penJDK7包含了JDKJava代码,所以要用JDK6对这部分代码进行编译(有点类似于gcc高版本代码要用gcc低版本编译一样)

3.        本次编译的JDK版本:openJDK7u40

4.        也可以用于 Ubuntu系操作系统

5.        http://www.linuxidc.com/Linux/2016-04/130484.htm

准备

1.        penJDK7源代码链接: http://pan.baidu.com/s/1hslDSXY 密码:js56,强烈建议初学者,用这个jdk源代码,按照下面的教程配置。其他源代码编译时,可能会出现各种问题

2.        工作环境:Linux Mint 17.3 Rosa

编译步骤

1.        安装依赖项:

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

2.        解压缩openJDK7源代码:

我把它放置在当前用户目录下面:/home/well/jdk/openjdk7u40/,如下图:


3.        编译前环境配置:

命令行中,cd 进入 openjdk7u40 源代码目录,切换成 root 用户:su root ,如下图:


再导入以下环境变量:

export LANG=C

exportALT\_BOOTDIR=/usr/lib/jvm/java-6-openjdk-i386

exportALT\_JDK\_IMPORT\_PATH=/usr/lib/jvm/java-6-openjdk-i386

export ALLOW\_DOWNLOADS=true

export HOST\_BUILD\_JOBS=4

export USE\_PRECOMPILED\_HEADER=true

export BUILD\_LANGTOOLS=true

export BUILD\_JAXP=true

export BUILD\_JAXWS=true

export BUILD\_CORBA=true

export BUILD\_HOTSPOT=true

export BUILD\_JDK=true

export BUILD\_INSTALL=false

exportALT\_OUTPUTDIR=/home/well/jdk/openjdk7u40/build

unset JAVA\_HOME

unset CLASSPATH

export WARNINGS\_ARE\_ERRORS=false

export SKIP\_DEBUG\_BUILD=false

export SKIP\_FASTDEBUG\_BUILD=true

export DEBUG\_NAME=debug


说明:以上环境变量命令直接复制到命令窗口执行即可,其中 exportALT\_BOOTDIR=/usr/lib/jvm/java-6-openjdk-i386exportALT\_JDK\_IMPORT\_PATH=/usr/lib/jvm/java-6-openjdk-i386两个是 openJDK6的路径,一般不需要修改(需要时可以指定其它的JDK作为启动器),装完openjdk-6-jdk一般就在这个路径上面,exportALT\_OUTPUTDIR=/home/well/jdk/openjdk7u40/build 这个是指定到自己需要编译的 openJDK7 对应路径

4.        JDK编译前检查:

命令行执行make sanity,如下图:


按照上面环境变量配置后,make sanity一般不会出问题

5.        JDK源码的编译:

命令行执行make DEBUG\_BINARIES=true,如下图:


一定要加上DEBUG\_BINARIES=true参数,以便在编译期间输出详细信息,经过半个多小时基本能编译完成

6.        JDK源码编译后:

编译后的位置如下图:


buildbuild-debug目录里面的东西就是我们需要的咯

然后进入./build/j2sdk-image/目录(或者build-debugbuild-fastdebug这两个目录),这是整个JDK的完整编译目录,复制到 JAVA\_HOME 目录,就可以作为一个完整的JDK使用,编译出来的虚拟机,在 java -version命令中带有用户名以及编译的日期时间等信息,如下图:


7.        后记

在大多数时候,如果我们并不关心JDK中HotSpot虚拟机以外的内容,只想单独编译HotSpot虚拟机的话(例如调试虚拟机时,每次改动程序都执行整个OpenJDK的MakeFile,编译速度肯定受不了),那么使用 ./hotspot/make 目录下的MakeFile进行替换即可,其他参数设置保持不变,这时候虚拟机的输出结果存放在./build/hotspot/outputdir/linux_i486_complier2/ 目录中(在不同的机器上面,最后那个目录的名称会有差别,linux表示Linux系统,i486表示32位JDK,complier2表示Server VM,complier1表示Client VM),进入后可以见到几个目录如下:


这些目录对应了不同的优化级别,级别越高,性能自然越好,但是输出代码与源代码的差距就越大,难于调试,具体使用那个目录的内容,取决于make命令后面的参数。

 

遇到的问题

1.        编译过程中出现./gamma: relocation error:/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.36.x86_64/jre/lib/amd64/libjava.so:symbol JVM_FindClassFromCaller, version SUNWprivate_1.1 not defined in filelibjvm.so with link time reference 异常,解决方案:

编辑./hotspot/make/linux/Makefile,注释掉所有的test\_gamma所在行

2.        编译过程中出现Error: time is more than 10 years from present: 1136059200000错误,解决方案:

修改CurrencyData.properties(路径:./jdk/src/share/classes/java/util/CurrencyData.properties

修改108行:AZ=AZM;2011-12-31-20-00-00;AZN

修改381行:MZ=MZM;2011-06-30-22-00-00;MZN

修改443行:RO=ROL;2011-06-30-21-00-00;RON

修改535行:TR=TRL;2011-12-31-22-00-00;TRY

修改561行:VE=VEB;2011-01-01-04-00-00;VEF


阅读全文
0 0
原创粉丝点击