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'