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

在 Centos 7 上编译 OpenJDK 23

目的

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

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

操作环境

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

操作步骤

下载 JDK 源码和 BootJDK

# 下载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 的默认版本太低,需要进行更新

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)

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 所在的文件路径

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

image-20240305155322193

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/512267.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RS编码的FPGA实现

RS编码&#xff0c;即Reed-solomon codes&#xff0c;是一类纠错能力很强的特殊的非二进制BCH码&#xff08;BCH码是一种有限域中的线性分组码&#xff0c;具有纠正多个随机错误的能力&#xff09;。对于任选正整数S可构造一个相应的码长为nqS-1的 q进制BCH码&#xff0c;而q作…

轻松玩转书生·浦语大模型趣味 Demo实战教程

大模型是什么&#xff1f; 大模型通常指的是机器学习或人工智能领域中参数数量巨大、拥有庞大计算能力和参数规模的模型。这些模型利用大量数据进行训练&#xff0c;并且拥有数十亿甚至数千亿个参数。大模型的出现和发展得益于增长的数据量、计算能力的提升以及算法优化等因素…

【QT】Qt Charts概述

目录 1 QtCharts模块 2 图表的主要组成部分 2.1 QChartView的功能 2.2 序列 2.3 坐标轴 2.4 图例 3 一个简单的QChart绘图程序 QtCharts是Qt提供的图表模块&#xff0c;在Qt5.7以前只有商业版才有Qt Charts&#xff0c;但是从Qt5.7开始&#xff0c;社区版本也包含了Qt C…

蓝海项目是真的好做吗?老隋分享的项目可不可靠?

在商业世界中&#xff0c;追求未充分开发的市场领域被视为一种创新的商业模式&#xff0c;这便是所谓的“蓝海战略”。随着社交媒体平台如抖音的兴起&#xff0c;许多创业者和企业开始关注并通过这些平台分享所谓的“蓝海项目”。其中&#xff0c;老隋作为抖音上的知名分享者&a…

MyBatis源码分析之基础支持层异常模块

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ &#x1f440;&#x1f440;&#x1f440; 个人博客&#xff1a;小奥的博客 &#x1f44d;&#x1f44d;&#x1f44d;&#xff1a;个人CSDN ⭐️⭐️⭐️&#xff1a;传送门 &#x1f379; 本人24应届生一枚&#xff0c;技术和水平有限&am…

c++的队列的用法

基本介绍 c的队列就是std::queue。 需要包含的头文件&#xff1a; #include<queue>queue就是先进先出队列 queue,就是队列&#xff0c;队列是一种容器适配器&#xff0c;专门设计用于在FIFO上下文中操作(先进先出)&#xff0c;其中将元素插入容器的一端并从另一端提…

Python爬虫实战第三例【三】【上】

零.实现目标 爬取视频网站视频 视频网站你们随意&#xff0c;在这里我选择飞某速&#xff08;狗头保命&#xff09;。 例如&#xff0c;作者上半年看过的“铃芽之旅”&#xff0c;突然想看了&#xff0c;但是在正版网站看要VIP&#xff0c;在盗版网站看又太卡了&#xff0c;…

【论文阅读】《Graph Neural Prompting with Large Language Models》

文章目录 0、基本信息1、研究动机2、创新点3、准备3.1、知识图谱3.2、多项选择问答3.3、提示词工程&#xff08;prompt engineering&#xff09; 4、具体实现4.1、提示LLMs用于问答4.2、子图检索4.3、Graph Neural Prompting4.3.1、GNN Encoder4.3.2、Cross-modality Pooling4.…

vscode 引入外部依赖包

背景 我要在vscode中写一些antlr代码生成的cpp代码&#xff0c;但是在引入头文件#include "antlr4-runtime.h"的时候&#xff0c;出现报错&#xff0c;显示没有这个头文件&#xff0c;显然这是我们没有导入相关的包&#xff0c;因此我首先尝试了将antlr4的依赖源码在…

nginx+Tomcat(反向代理、动静分离、负载均衡)

目录 前言 一、nginx和tomcat组合的架构 二、案例操作 前言 tomcat服务既可以处理动态页面&#xff0c;也可以处理静态页面&#xff1b;但其处理静态页面的速度远远不如nginx和apache服务&#xff0c;但ngingx和apache服务无法直接处理动态页面&#xff0c;下文就讲述了ngi…

windows安装pytorch(anaconda安装)

文章目录 前言一、安装anaconda1、进入官网下载&#xff08;1&#xff09;点击view all Installers&#xff08;2&#xff09;下载需要的版本 2、一顿默认安装就行&#xff08;到这一步这样填&#xff09;3、进入开始找到Anaconda Prompt&#xff0c;点击进入到base环境 二、新…

Python绘图-9饼图(下)

9.6饼图添加阴影 9.6.1图像呈现 9.6.2绘图代码 # 导入相关库 import numpy as np # 导入numpy库&#xff0c;用于处理数组和数值计算 import matplotlib.pyplot as plt # 导入matplotlib的绘图模块&#xff0c;用于可视化 import matplotlib.patheffects as path_effects …