在 Centos 7 上编译 OpenJDK 23 及错误处理

在 Centos 7 上编译 OpenJDK 23

目的

希望在 JDK 源码中添加自己的中文注释,方便对学习过程进行记录。

其中遇到的错误主要有BootJDK的版本问题字符编码问题,没有去调查哪些版本是兼容的,本文主要处理字符编码问题。

操作环境

组件 版本
操作系统 Centos 7
待编译 JDK 的源码 OpenJDK 23
Boot JDK OpenJDK 21

操作步骤

下载 JDK 源码和 BootJDK

sh 复制代码
# 下载OpenJDK源码(需要编译的版本)
wget https://codeload.github.com/openjdk/jdk/zip/refs/tags/jdk-23%2B12

# 下载编译好的OpenJDK作为BootJDK
wget https://download.java.net/java/GA/jdk21.0.2/f2283984656d49d69e91c558476027ac/13/GPL/openjdk-21.0.2_linux-x64_bin.tar.gz

下载后,对其进行解压,zip 格式使用 unzip 命令,tar 格式使用 tar 命令。没有相关工具则使用 yum install -y <xxx> 进行安装 。

假设解压完成后的目录分别为 jdk (待编译目录)和 jdk-21.0.2(BootJDK目录),之后操作涉及的步骤到在 jdk 目录中,和 jdk-21.0.2 无关。

更新 gcc 版本

gcc 的默认版本太低,需要进行更新

sh 复制代码
gcc -v & \
yum install centos-release-scl -y & \
yum install devtoolset-8-gcc* -y & \
scl enable devtoolset-8 bash & \
gcc -v

其中 scl enable devtoolset-8 bash 只在当前命令行生效,每次重启 bash 都需要再次执行该命令。如果需要永久生效,可以设置环境变量,也可以替换掉 /usr/bin/gcc 对应的软连接

安装C.UTF-8编码集(Centos 7)

java 复制代码
localedef -v -c -i en_US -f UTF-8 C.UTF-8

安装该编码集后,确实不再出现警告信息,但依然无法对文件中存在的中文字符进行正确编译。

修改 encoding

这里通过 IDEA 的 Deployment 功能,对 Linux 服务器上的 jdk 目录做一个映射,然后将其下载到 Windows 本地系统中,方便使用 IDEA 工具进行修改。

通过 ctrl + shift + r 查找 encoding ascii,修改其中一个文件(JavaCompilation.gmk)为 encoding utf-8 成功编译带中文注释的 jdk,虽然成功编译,但是最终的生成的images中并没有中文注释,似乎被忽略了一样。修改所有的 encoding asciiencoding utf-8,最终成功实现带中文注释的编译

配置和编译

jdk 目录下执行下面命令,前面的 yum install xxx 只是安装一些可能没有安装的工具,关键在 sh configuremake

注意 --with-boot-jdk 指定自己的 BootJDK 所在的文件路径

sh 复制代码
yum groupinstall "Development Tools" -y & \
yum install freetype-devel -y & \
yum install fontconfig-devel -y & \
yum install cups-devel -y & \
yum install libXtst-devel libXt-devel libXrender-devel libXrandr-devel libXi-devel -y & \
yum install alsa-lib-devel -y & \
yum install libffi-devel -y & \
yum install autoconf -y & \
sh configure --with-boot-jdk=/opt/module/jdk-21.0.2 & \
make images

最终编译结果为 jdk/build/linux-x86_64-xxx/images/jdk,剩下只需要在其它项目中指定该路径为 JAVA_HOME 即可。

其它

即使通过 IDEA 中的 Deployment 功能进行映射,但是 jdk 项目中的代码并没有高亮,也没有类和类之间的代码跳转。

另外,jdk 项目本身不能够指定另一个编译好的 JDK,否则会出现包名冲突。

解决这个问题的办法是,通过右键 Mark Directory as Sources Root,最终效果如下。

相关推荐
Wang15306 小时前
jdk内存配置优化
java·计算机网络
0和1的舞者7 小时前
Spring AOP详解(一)
java·开发语言·前端·spring·aop·面向切面
Wang15307 小时前
Java多线程死锁排查
java·计算机网络
小小星球之旅7 小时前
CompletableFuture学习
java·开发语言·学习
jiayong238 小时前
知识库概念与核心价值01
java·人工智能·spring·知识库
皮皮林5518 小时前
告别 OOM:EasyExcel 百万数据导出最佳实践(附开箱即用增强工具类)
java
Da Da 泓9 小时前
多线程(七)【线程池】
java·开发语言·线程池·多线程
To Be Clean Coder9 小时前
【Spring源码】getBean源码实战(三)
java·mysql·spring
Wokoo79 小时前
开发者AI大模型学习与接入指南
java·人工智能·学习·架构
oMcLin9 小时前
CentOS 7 频繁出现 “Connection Refused” 错误的原因分析与解决
linux·运维·centos