centos迁移到rocky

编译相关的适配事项

  1. 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
  1. 依赖库版本变化
    比如:
    glibc:Rocky 9 是 2.34,CentOS 7 是 2.17

boost、protobuf、openssl、libstdc++ 等库版本大幅提升

某些老版本依赖的 API 可能被移除或语义变更

建议:
确保编译时所需的第三方库都在 Rocky 中存在,版本兼容

可使用 dnf provides 查找系统库是否存在

  1. CMake / Make 构建系统版本差异
    若使用 CMake 构建,CentOS 默认可能是 2.x,而 Rocky 已到 3.x、甚至 3.20+

某些写法(如 target_link_libraries 或 FetchContent)在旧版本下无效

建议:

检查 CMakeLists.txt 是否依赖过时特性

升级 cmake 可用 pip install cmake 或 EPEL 源安装高版本

  1. 动态链接和 ABI 兼容
    glibc 升级可能导致 ABI(Application Binary Interface)变化

如果程序依赖 .so 运行库,必须确保这些库版本兼容或重新编译

建议:

不建议直接复制 CentOS 编译的 .so 文件到 Rocky Linux

尽量在 Rocky 系统上重新编译源码,确保 ABI 一致

  1. 头文件路径或默认参数变化
    某些头文件在新版 glibc 中路径有变(比如

新 GCC 默认开启 -Werror、-fstack-protector-strong 等编译选项

建议:
编译脚本中明确指定 -std=c++XX 和 -Wall -Wno-xxx

不要依赖旧编译器的默认行为

6、判断 一个库是哪个版本的gcc 编译

strings libprotobuf.so | grep GCC

image

判断差异的工具

查看系统差异:
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

posted @ 2025-08-12 10:56  LdreamerD  阅读(102)  评论(0)    收藏  举报