博学之,审问之,慎思之,明辨之,笃行之!

导航

CentOS 7 编译 openjdk 8

环境

  • 平台:CentOS 7
  • 内存:1G
  • 磁盘:15G
  • bootstrap jdk:openjdk-8

开始我的内存是 512M,编译的时候会发生 OOM(内存溢出),1G 内存可以通过。

依赖

以下依赖,都是在平台最小安装下需要安装的工具。

也可以使用 bash ./configure 一步一步来安装自己平台缺失的依赖项。

  • make、gcc、g++
  • unzip、zip
  • libXtst-devel、libXt-devel、libXrender-devel
  • cups-devel
  • freetype-devel
  • alsa-lib-devel
  • fontconfig-devel

配置

当以上执行 bash ./configure 没有缺失的依赖之后,执行以下命令,配置安装路径。
最好指定 --prefix 参数,否则编译文件会按照默认路径安转,不利于查看。

bash ./configure --prefix=/opt/java/openjdk-8-build

编译

make all

打印以下信息,编译完成。

如果构建期间报错,一般可以通过输出错误信息可以找到具体的原因。如果还是找不到原因,可以在评论留言,我会不定期查回复。

----- Build times -------
Start 2021-09-29 17:16:54
End   2021-09-29 17:46:37
00:00:35 corba
00:00:41 demos
00:03:56 docs
00:15:46 hotspot
00:00:56 images
00:00:23 jaxp
00:00:29 jaxws
00:06:04 jdk
00:00:37 langtools
00:00:15 nashorn
00:29:43 TOTAL
-------------------------
Finished building OpenJDK for target 'all'

安转

编译完成后,执行一下命令,安装 jdk 到--prefix 指定的目录。

make install

单独编译 HotSpot

进入hotspot/make/<platform>目录里执行make就行。
我具体执行的命令是在hotspot/make/linux里:

make ALT_BOOTDIR=$JAVA_HOME LANG=C HOTSPOT_BUILD_JOBS=4 ARCH_DATA_MODEL=64 fastdebug  

编译完成会在 hotspot/make/linux/linux_amd64_compiler2 目录下生成 libjvm.so 文件,该文件就是 JVM。

将编译的libjvm.so 替换 $JAVA_HOME/jre/lib/amd64/server 目录下的 libjvm.so,即可使用自己编译的 JVM。

FAQ

缺失 stdc++

如果出现下面错误,是由于缺少依赖 libstdc++-static

Linking vm...
**NOTICE** Dtrace support disabled: /usr/include/sys/sdt.h not found
/usr/bin/ld: cannot find -lstdc++
collect2: error: ld returned 1 exit status
make[2]: Leaving directory `/root/java/jdk_build/jdk8u/hotspot/make/linux/linux_amd64_compiler2/fastdebug'
All done.
make[1]: Leaving directory `/root/java/jdk_build/jdk8u/hotspot/make/linux/linux_amd64_compiler2/fastdebug'

参考

posted on 2021-09-29 17:32  PP杰  阅读(158)  评论(0编辑  收藏  举报