ubuntu20.4 openjdk7编译报错

This OS is not supported:" `uname -a`; exit 1;

>&2 echo "*** This OS is not supported:" `uname -a`; exit 1;
*** This OS is not supported: Linux dawn-Virtual-Machine 5.11.0-43-generic #47~20.04.2-Ubuntu SMP Mon Dec 13 11:06:56 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
make[6]: *** [/home/dawn/workstation/openjdk/hotspot/make/linux/Makefile:240: check_os_version] Error 1
make[6]: Leaving directory '/home/dawn/bin/openjdk7-debug/hotspot/outputdir'
make[5]: *** [/home/dawn/workstation/openjdk/hotspot/make/linux/Makefile:261: linux_amd64_compiler2/debug] Error 2
make[5]: Leaving directory '/home/dawn/bin/openjdk7-debug/hotspot/outputdir'
make[4]: *** [Makefile:192: generic_build2] Error 2
make[4]: Leaving directory '/home/dawn/workstation/openjdk/hotspot/make'
make[3]: *** [Makefile:151: jvmg] Error 2
make[3]: Leaving directory '/home/dawn/workstation/openjdk/hotspot/make'
make[2]: *** [make/hotspot-rules.gmk:114: hotspot-build] Error 2
make[2]: Leaving directory '/home/dawn/workstation/openjdk'
make[1]: *** [Makefile:262: generic_debug_build] Error 2
make[1]: Leaving directory '/home/dawn/workstation/openjdk'
make: *** [Makefile:272: build_debug_image] Error 2

ubuntu20.4 openjdk7编译报错

找到报错位置,出现此错误是官方不希望在老的系统上编译,但是由于检测机制问题,导致误报,官方提供了解决办法设置DISABLE_HOTSPOT_OS_VERSION_CHECK=ok

export DISABLE_HOTSPOT_OS_VERSION_CHECK=ok

 Error: time is more than 10 years from present:

Error: time is more than 10 years from present: 1136059200000
java.lang.RuntimeException: time is more than 10 years from present: 1136059200000
        at build.tools.generatecurrencydata.GenerateCurrencyData.makeSpecialCaseEntry(GenerateCurrencyData.java:285)
        at build.tools.generatecurrencydata.GenerateCurrencyData.buildMainAndSpecialCaseTables(GenerateCurrencyData.java:225)
        at build.tools.generatecurrencydata.GenerateCurrencyData.main(GenerateCurrencyData.java:154)
make[5]: *** [Makefile:343: /home/dawn/bin/openjdk7//../openjdk7-debug/lib/currency.data] Error 1
make[5]: Leaving directory '/home/dawn/workstation/openjdk/jdk/make/java/java'
make[4]: *** [Makefile:67: all] Error 1
make[4]: Leaving directory '/home/dawn/workstation/openjdk/jdk/make/java'
make[3]: *** [Makefile:253: all] Error 1
make[3]: Leaving directory '/home/dawn/workstation/openjdk/jdk/make'
make[2]: *** [make/jdk-rules.gmk:89: jdk-build] Error 2
make[2]: Leaving directory '/home/dawn/workstation/openjdk'
make[1]: *** [Makefile:262: generic_debug_build] Error 2
make[1]: Leaving directory '/home/dawn/workstation/openjdk'
make: *** [Makefile:272: build_debug_image] Error 2

简单粗暴,grep "time is more than 10 years from present",找到报错的代码,直接把10年改成20年,20年不够就100年

Freetype Failed: headers are too old 、Failed: too old library

Required version of freetype: 2.3.0
Detected freetype headers: 2.10.1
Failed: headers are too old.
Detected freetype library: 2.10.1
Failed: too old library.

显然是误报,2.10怎么会比2.3旧呢,打开jdk/make/tools/freetypecheck/freetypecheck.c,发现是直接检测的字符串,而不是数字,3比1大,所以它认为旧了,解决办法很简单,直接在freetypecheck.c main函数第一行return 0,跳过检测,或者也可以去改makefile

 warning: invalid suffix on literal; C++11 requires a space between literal and string macro

error: 'int readdir_r(DIR*, dirent*, dirent**)' is deprecated [-Werror=deprecated-declarations]

以上两个错(应该还有其它也是这个原因)误都是因为启用了编译选项--Werro,视警告为错误;出现任何警告即放弃编译.解决方案为关闭--Werro选项,在./hotspot/make/linux/makefiles/gcc.make,找到WARNINGS_ARE_ERRORS = -Werro,将其删除或改为WARNINGS_ARE_ERRORS = -Wno-all

error: unable to find string literal operator ‘operator""tag’ with ‘const char [58]’, ‘long unsigned int’ arguments

hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp做如下修改

hotspot/src/share/vm/gc_implementation/g1/concurrentMark.cpp	2016-05-10 22:04:53.681530187 +0200
@@ -4640,16 +4640,16 @@ CMTask::CMTask(uint worker_id,
 // For per-region info
 #define G1PPRL_TYPE_FORMAT            "   %-4s"
 #define G1PPRL_TYPE_H_FORMAT          "   %4s"
-#define G1PPRL_BYTE_FORMAT            "  "SIZE_FORMAT_W(9)
+#define G1PPRL_BYTE_FORMAT            "  " SIZE_FORMAT_W(9)
 #define G1PPRL_BYTE_H_FORMAT          "  %9s"
 #define G1PPRL_DOUBLE_FORMAT          "  %14.1f"
 #define G1PPRL_DOUBLE_H_FORMAT        "  %14s"
 
 // For summary info
-#define G1PPRL_SUM_ADDR_FORMAT(tag)    "  "tag":"G1PPRL_ADDR_BASE_FORMAT
-#define G1PPRL_SUM_BYTE_FORMAT(tag)    "  "tag": "SIZE_FORMAT
-#define G1PPRL_SUM_MB_FORMAT(tag)      "  "tag": %1.2f MB"
-#define G1PPRL_SUM_MB_PERC_FORMAT(tag) G1PPRL_SUM_MB_FORMAT(tag)" / %1.2f %%"
+#define G1PPRL_SUM_ADDR_FORMAT(tag)    "  " tag ":" G1PPRL_ADDR_BASE_FORMAT
+#define G1PPRL_SUM_BYTE_FORMAT(tag)    "  " tag ": " SIZE_FORMAT
+#define G1PPRL_SUM_MB_FORMAT(tag)      "  " tag ": %1.2f MB"
+#define G1PPRL_SUM_MB_PERC_FORMAT(tag) G1PPRL_SUM_MB_FORMAT(tag) " / %1.2f %%"
 
 G1PrintRegionLivenessInfoClosure::
 G1PrintRegionLivenessInfoClosure(outputStream* out, const char* phase_name)

 详见[PATCH RFC 3/5] fix build errors with gcc6 (java.net)

Unsupported major.minor version 52.0

默认安装的ant是openjdk8或11对于的ant版本,所以需要装合适的ant版本,ant下载地址 1选一个1.7的,下载并解压,见解压后的bin路径添加到环境变量PATH中

make: the '-j' option requires a positive integer argument

在报错的地方加了打印没发现命令有问题,最后没办法只好关闭多线程编译,

unset HOTSPOT_BUILD_JOBS

不得不说,问题真多,不如直接下一个openJDK7下载

上一篇:Indesig排版中数学公式的规范问题讲解


下一篇:Ubuntu 下几种软件安装的方法小结