linux(Ubuntu)下编译openJDK

参考文章:
http://blog.csdn.net/u011521890/article/details/52197723
编译中出现的问题:
问题1:
[javac] /home/dream/jvm/openjdk/langtools/src/share/classes/com/sun/tools/javac/comp/Resolve.java:2182: warning: [overrides] Class Resolve.InapplicableSymbolsError.Candidate overrides equals, but neither it nor any superclass overrides hashCode method
    [javac]         private class Candidate {
    [javac]                 ^
    [javac] error: warnings found and -Werror specified
    [javac] 1 error
    [javac] 1 warning
解决:由于编译的openjdk版本为1.7,但是bootstrap的jdk版本为1.8。只要将bootstrap的jdk版本改为1.7即可。
问题2:
cc1plus: error: the "stabs" debug format cannot be used with pre-compiled headers [-Werror=deprecate]

解决:因为高版本的gcc不再支持stabs,解决办法:在make命令中加上 DEBUG_BINARIES=true

问题3:

cc1plus all warnings being treated as errors

解决:打开 /hotspot/make/linux/makefiles/gcc.make

其中的Linux是对应的自己的操作系统

jdk1.7在127行,jdk1.8在207行(可能每个版本的不同,直接搜索WARNINGS_ARE_ERRORS 即可),注释掉:

WARNINGS_ARE_ERRORS = -Werror

问题4:

This OS is not supported: Linux ubuntu 4.4.0-62-generic #83-Ubuntu SMP Wed Jan 18 14:09:55 UTC 2017 i686 i686 i686 GNU/Linux

解决:修改 make/linux/Makefile,找到 SUPPORTED_OS_VERSION变量定义的地方,在后面追加 4%,如下所示

SUPPORTED_OS_VERSION = 2.4% 2.5% 2.6% 3% 4%

问题5:

time is more than 10 years from present: 1136059200000
java.lang.RuntimeException: time is more than 10 years from present: 1136059200000

解决:网上写的是将 /jdk/src/share/classes/java/util/CurrencyData.properties文件的535 行的TR=TRL;2010-12-31-22-00-00;TRY时间该到距离现在10年以内,但是更改以后发现还是会出这个错,于是将CurrencyData.properties文件中所有的时间都更改到距离现在10年以内,再次编译时,发现没有报这个错误。

==============================================================

经过大约20分钟的编译,出现以下信息表示编译成功

linux(Ubuntu)下编译openJDK_第1张图片

========================================================================

修改openjdk源代码,参考:http://www.07net01.com/2015/08/913552.html,输出我们自己的版本信息。

配置环境变量,使用刚才编译好的jdk。在命令行输入java -version后,显示如下信息:


你可能感兴趣的:(《深入理解Java虚拟机》)