CentOS7下编译OpenJDK12

x33g5p2x  于2021-12-18 转载在 其他  
字(3.8k)|赞(0)|评价(0)|浏览(669)

OpenJDK的编译

安装环境:CentOS7

下载OpenJDK

下载地址:https://hg.openjdk.java.net/jdk/jdk12/,点击左边的zip。

下载后的包名为jdk12-06222165c35f.zip,上传至linux的/usr/local目录下,并解压。

# yum install -y unzip 没装的unzip的先安装
# unzip jdk12-06222165c35f

解压后,打开doc/building.xml或doc/building.md学习如何编译,本文也参考这个文档进行的。

下载Oracle JDK

因为OpenJDK的各个组成部分有的是使用C++编译,有的是使用Java自身实现的,所以编译这些Java代码需要一个可用的JDK,官方称这个JDK为“Bootstrap JDK”,所以我使用的版本为:

# java -version
java version "11.0.8" 2020-07-14 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.8+10-LTS)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.8+10-LTS, mixed mode)

下载地址:https://www.oracle.com/java/technologies/javase-jdk11-downloads.html

下载后的包名为jdk-11.0.8_linux-x64_bin.tar.gz,上传至linux的/usr/local目录下,并解压。

然后配置环境变量:

# vi /etc/profile
最后添加下面两行
JAVA_HOME=/usr/local/jdk-11.0.8
export PATH=$PATH:$JAVA_HOME/bin

然后使用source /etc/profile刷新配置,使用java -version命令验证环境变量是否配置成功。

安装扩展依赖

# yum groupinstall -y "Development Tools"
# yum install -y freetype-devel
# yum install -y cups-devel
# yum install -y libXtst-devel libXt-devel libXrender-devel libXrandr-devel libXi-devel
# yum install -y alsa-lib-devel
# yum install -y libffi-devel
# yum install -y autoconf
# yum install -y fontconfig-devel

上面的依赖安装完成后,运行configure对编译进行相关配置:

# bash configure --enable-debug --with-jvm-variants=server

如果这一步报错了,根据错误信息安装相关的依赖。

configure的相关参数可以使用bash configure --help查看,这里列举几个常用的参数:

  • –enable-debug:等同于–with-debug-level=fastdebug。
  • –with-debug-level:设置编译的级别,可选值为release、fastdebug、slowdebug,默认为release,越往后进行的优化措施越少,带的调试信息越多。
  • –with-jvm-variants=[,…]:指定编译模式,可选值为server, client, minimal, core, zero, custom,可以选多个。
  • –with-target-bits=:指定编译32位还是64位虚拟机。

安装

运行make,如果安装失败了,解决错误后要使用make cleanmake dist-clean清理后再执行make

# make
Building target 'default (exploded-image)' in configuration 'linux-x86_64-server-fastdebug'
Compiling 8 files for BUILD_TOOLS_LANGTOOLS
Compiling 19 properties into resource bundles for jdk.compiler
Parsing 2 properties into enum-like class for jdk.compiler
Compiling 13 properties into resource bundles for jdk.javadoc
Compiling 117 files for BUILD_java.compiler.interim
Compiling 396 files for BUILD_jdk.compiler.interim
Compiling 304 files for BUILD_jdk.javadoc.interim
Compiling 162 files for BUILD_TOOLS_JDK
...
...
Warning: No SCM configuration present and no .src-rev
Compiling 4 files for BUILD_JIGSAW_TOOLS
Stopping sjavac server
Finished building target 'default (exploded-image)' in configuration 'linux-x86_64-server-fastdebug'

验证

# cd build/linux-x86_64-server-fastdebug/jdk/bin
# ./java -version
openjdk version "12-internal" 2019-03-19
OpenJDK Runtime Environment (fastdebug build 12-internal+0-adhoc.root.jdk12-06222165c35f)
OpenJDK 64-Bit Server VM (fastdebug build 12-internal+0-adhoc.root.jdk12-06222165c35f, mixed mode)

安装图形界面

# yum groupinstall -y "GNOME Desktop"
# init 5

安装完后最好用root用户登录,不然后面会有一堆权限问题。

安装clion

下载地址:https://www.jetbrains.com/clion/download/#section=linux

上传至/usr/local/目录下,并解压:

# tar -zxvf CLion-2020.2.tar.gz

第一次运行clion:

# cd clion-2020.2/bin
# ./clion.sh

第一次运行时会在应用菜单(类似windows的开始菜单)中创建一个快捷菜单,下次运行从快捷菜单进入(不要使用clion.sh,否则之前的配置没有了)。

clion打开后可能会报一个错误Inotify Watches Limit,根据后面的链接解决:https://confluence.jetbrains.com/display/IDEADEV/Inotify+Watches+Limit

导入OpenJDK源码

  1. 打开CLION -> New CMake Project from Sources:

  1. 然后选择OpenJDK目录/usr/local/jdk12-06222165c35f,然后按默认勾选,点OK:

调试

在右上角,和idea一样的位置,创建一个Cmake Application

Execuable中要选择编译出来的java,对应的目录为/usr/local/jdk12-06222165c35f/build/linux-x86_64-server-fastdebug/jdk/bin。

然后我们把断点打到/usr/local/jdk12-06222165c35f/src/java.base/share/native/libjli/java.c的394行,然后点击debug运行,可以看到进入断点,并且在Debug面板可以看到我们传入的-version参数,如下图所示:

直接继续运行,最终会在控制台看到如下输出:

/usr/local/jdk12-06222165c35f/build/linux-x86_64-server-fastdebug/jdk/bin/java -version
Signal: SIGSEGV (Segmentation fault)
Signal: SIGSEGV (Segmentation fault)
Signal: SIGSEGV (Segmentation fault)
openjdk version "12-internal" 2019-03-19
OpenJDK Runtime Environment (fastdebug build 12-internal+0-adhoc.root.jdk12-06222165c35f)
OpenJDK 64-Bit Server VM (fastdebug build 12-internal+0-adhoc.root.jdk12-06222165c35f, mixed mode)

相关文章