centos迁移到rocky
编译相关的适配事项
- GCC 编译器版本变化
CentOS 7 默认 GCC 为 4.8.5
Rocky Linux 8 默认 GCC 为 8.5
Rocky Linux 9 默认 GCC 为 11.4
影响:
高版本 GCC 编译器默认支持更新的 C++ 标准(如 C++17、C++20)
老代码可能会遇到警告甚至报错(如废弃用法、标准变更)
如果程序用了 GCC 特有扩展或 inline assembly,要注意新旧语法兼容问题
建议:
查看老代码是否依赖特定 GCC 版本。必要时可以使用 devtoolset 安装特定版本:
# Rocky Linux 8/9 用这个安装 devtoolset:
dnf install gcc-toolset-11
scl enable gcc-toolset-11 bash
- 依赖库版本变化
比如:
glibc:Rocky 9 是 2.34,CentOS 7 是 2.17
boost、protobuf、openssl、libstdc++ 等库版本大幅提升
某些老版本依赖的 API 可能被移除或语义变更
建议:
确保编译时所需的第三方库都在 Rocky 中存在,版本兼容
可使用 dnf provides 查找系统库是否存在
- CMake / Make 构建系统版本差异
若使用 CMake 构建,CentOS 默认可能是 2.x,而 Rocky 已到 3.x、甚至 3.20+
某些写法(如 target_link_libraries 或 FetchContent)在旧版本下无效
建议:
检查 CMakeLists.txt 是否依赖过时特性
升级 cmake 可用 pip install cmake 或 EPEL 源安装高版本
- 动态链接和 ABI 兼容
glibc 升级可能导致 ABI(Application Binary Interface)变化
如果程序依赖 .so 运行库,必须确保这些库版本兼容或重新编译
建议:
不建议直接复制 CentOS 编译的 .so 文件到 Rocky Linux
尽量在 Rocky 系统上重新编译源码,确保 ABI 一致
- 头文件路径或默认参数变化
某些头文件在新版 glibc 中路径有变(比如、 )
新 GCC 默认开启 -Werror、-fstack-protector-strong 等编译选项
建议:
编译脚本中明确指定 -std=c++XX 和 -Wall -Wno-xxx
不要依赖旧编译器的默认行为
6、判断 一个库是哪个版本的gcc 编译
strings libprotobuf.so | grep GCC

判断差异的工具
查看系统差异:
uname -a
ldd --version
rpm -qa | sort > installed_packages.txt
检查链接依赖:
ldd your_binary
readelf -a your_binary | less
版本对比(CentOS vs Rocky):
gcc --version
cmake --version
ldd --version
ld --version
glibc 版本:ldd --version

浙公网安备 33010602011771号