CentOS7下编译OpenJDK12

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

OpenJDK的编译

安装环境:CentOS7

下载OpenJDK

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

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

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

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

下载Oracle JDK

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

  1. # java -version
  2. java version "11.0.8" 2020-07-14 LTS
  3. Java(TM) SE Runtime Environment 18.9 (build 11.0.8+10-LTS)
  4. 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目录下,并解压。

然后配置环境变量:

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

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

安装扩展依赖

  1. # yum groupinstall -y "Development Tools"
  2. # yum install -y freetype-devel
  3. # yum install -y cups-devel
  4. # yum install -y libXtst-devel libXt-devel libXrender-devel libXrandr-devel libXi-devel
  5. # yum install -y alsa-lib-devel
  6. # yum install -y libffi-devel
  7. # yum install -y autoconf
  8. # yum install -y fontconfig-devel

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

  1. # 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

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

验证

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

安装图形界面

  1. # yum groupinstall -y "GNOME Desktop"
  2. # init 5

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

安装clion

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

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

  1. # tar -zxvf CLion-2020.2.tar.gz

第一次运行clion:

  1. # cd clion-2020.2/bin
  2. # ./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参数,如下图所示:

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

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

相关文章