在 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,最终效果如下。

相关推荐
小羊没烦恼!2 天前
微服务化的基石——持续集成
java·大数据·word·powerpoint·.net
俊昭喜喜里2 天前
java中的继承和多态的区别
java
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
譕痕2 天前
JSONObject与JSONArray封装数据格式区别
java·json
胡写代码2 天前
别再前后端各写一套表单校验了
java·后端
小鱼能吃糖2 天前
缺陷修复总览 · mall电商项目:5类缺陷,1个病根,4个业务域
java·电商
此时不提桶,更待何时2 天前
01-06-A-JVM排查实战详解
java·jvm
vipxieliang2 天前
ValidX 在 DDD 领域驱动设计中的实践
java·spring boot
ba_pi2 天前
mysql 查询所有表名并授权
java
ProcessOn官方账号2 天前
java函数式编程--入门基础
java·编程·函数式编程