温馨提示×

GCC编译CentOS软件包流程是怎样的

小樊
38
2025-12-17 09:28:56
栏目: 智能运维

在CentOS上用GCC编译打包的推荐流程


一 准备环境

  • 安装基础编译工具与依赖:
    • 安装开发工具组:sudo yum groupinstall “Development Tools” -y
    • 安装C/C++编译器:sudo yum install -y gcc gcc-c++ make
    • 其他常用依赖(按需):bison flex texinfo gmp-devel mpfr-devel libmpc-devel ncurses-devel
  • 准备打包工具(推荐 RPM 打包):
    • 安装 RPM 构建工具:sudo yum install -y rpm-build rpmdevtools
  • 准备源码与版本控制:
    • 建议将源码放入 ~/rpmbuild/SOURCES/,规范目录结构由 rpmdevtools 提供(如 rpmdev-setuptree)。

二 获取源码与准备构建目录

  • 获取源码包(示例):
    • 下载:wget https://ftp.gnu.org/gnu/hello/hello-2.12.tar.gz
    • 解压并放入 SOURCES:tar xf hello-2.12.tar.gz && mv hello-2.12.tar.gz ~/rpmbuild/SOURCES/
  • 生成打包骨架(rpmbuild 工作目录):
    • 执行:rpmdev-setuptree(生成 ~/rpmbuild/{SPECS,SOURCES,BUILD,RPMS,SRPMS}
  • 放置 spec 文件:
    • 将自定义的 hello.spec 放入 ~/rpmbuild/SPECS/(后续说明 spec 关键字段)。

三 编写SPEC文件要点

  • 关键字段与目录映射(简表):
    • Name / Version / Release:软件名、版本、发布号
    • Summary / License / URL:简介、许可证、主页
    • Source0:指向 ~/rpmbuild/SOURCES/hello-2.12.tar.gz
    • BuildRequires:构建时依赖(如 gcc, make
    • Requires:运行时依赖(按需)
    • %description:描述
    • %prep:解压与补丁(常用 %setup -q
    • %build:构建步骤(示例:./configure && make -j$(nproc)
    • %install:安装到 %{buildroot}(示例:make install DESTDIR=%{buildroot}
    • %files:列出安装到根的文件清单
    • %changelog:变更记录
  • 最小可用示例(仅示意,需按项目调整):
    • Name: hello
    • Version: 2.12
    • Release: 1%{?dist}
    • Summary: A minimal hello world program
    • License: GPLv3+
    • URL: https://www.gnu.org/software/hello/
    • Source0: %{name}-%{version}.tar.gz
    • BuildRequires: gcc, make
    • %description
      • Hello world demo packaged by GCC on CentOS.
    • %prep
      • %setup -q
    • %build
      • ./configure --prefix=/usr
      • make %{?_smp_mflags}
    • %install
      • make install DESTDIR=%{buildroot}
    • %files
      • %{_bindir}/hello
      • %{_mandir}/man1/hello.1*
    • %changelog

四 使用GCC构建与生成RPM包

  • 构建二进制 RPM 与源码 RPM:
    • ~/rpmbuild/SPECS/ 目录执行:
      • 构建二进制包:rpmbuild -ba hello.spec
      • 仅构建源码包:rpmbuild -bs hello.spec
  • 产物位置:
    • 二进制 RPM:~/rpmbuild/RPMS/x86_64/hello-2.12-1.el7.x86_64.rpm(架构随系统变化)
    • 源码 RPM:~/rpmbuild/SRPMS/hello-2.12-1.el7.src.rpm
  • 本地安装与验证:
    • 安装:sudo yum localinstall ~/rpmbuild/RPMS/x86_64/hello-*.rpm -y
    • 验证:hello --versionrpm -qi hellorpm -ql hello

五 常见问题与进阶建议

  • 构建依赖缺失:在 BuildRequires 中补全(如 gcc-c++, ncurses-devel, gmp-devel, mpfr-devel, libmpc-devel),再重新构建。
  • 并行编译加速:在 %build 中使用 make %{?_smp_mflags}-j$(nproc)(注意机器内存与核心数,避免 OOM)。
  • 多版本 GCC 与兼容性:
    • CentOS 7 基础源 gcc 4.8.5 较旧,若需 C++14/17/20,建议通过 devtoolset(如 devtoolset-8/9/10)按需启用高版本 GCC,避免直接替换系统编译器。
    • 启用方式:scl enable devtoolset-8 bash(仅当前会话),或在脚本中 source /opt/rh/devtoolset-8/enable
  • 升级 GCC 的两种方式对比(简要):
    • 源码编译安装:可控性强,可装到 /usr/local/gcc-x.y.z,但维护成本高。
    • SCL devtoolset:与系统隔离、切换方便、回退简单,适合生产环境。

0