学习GCC编译器和CentOS系统,能否实现开发无忧?

更新于
2026-08-21 02:23:41
2阅读来源:SEO教程
  • 内容介绍
  • 文章标签
  • 相关推荐

CentOS程序下GCC编译器使用教程 © 2023

一、安装与版本确认

在 CentOS 上进行 C/C++ 开发,最头疼的问题往往是“没有合适的编译器”或“程序自带的 GCC 过旧、缺少依赖导致编译失败”。下面一步步帮你摆脱这些痛点。其实,

学习GCC编译器和CentOS系统,能否实现开发无忧?
  • 痛点1:程序默认的 GCC 版本太低。无法满足新特性需求,
  • 痛点2:手动下载源码编译耗时且易出错。按理说,
  • 方法:使用 yum 或 SCL快速获取最新、稳定的 GCC 包。老实说,

通过 yum 安装官方仓库提供的 GCC

# 安装基本 C/C++ 编译环境
sudo yum install -y gcc gcc-c++
# 安装内核开发头文件
sudo yum install -y kernel-devel

使用 SCL 创建独立的 GCC 环境

# 添加 SCL 仓库
sudo yum install -y centos-release-scl
# 安装指定版本。例如 gcc-9
sudo yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++
# 启用该版本
scl enable devtoolset-9 bash

启用后可通过以下命令确认版本:

$ gcc --version
gcc 9.x.x ...

二、GCC 基础使用

常见痛点:新手经常忘记指定输出文件名、误用选项导致“找不到符号”或“链接错误”。下面给出最简洁、最不易出错的写法。

单文件编译示例

# hello.c 为示例源文件
gcc -Wall -O2 -o hello hello.c
# 参数说明:
# -Wall 开启所有常用警告,帮助提前发现潜在错误
# -O2 合理调整。兼顾性能与编译速度
# -o 指定生成可执行文件名

C++ 文件编译示例

# hello.cpp 为示例源文件
g++ -Wall -std=c++17 -O2 -o hello_cpp hello.cpp

三、编译后运行

痛点:运行时出现 “Permission denied” 或 “No such file or directory”。这通常是因为没有执行权限或方法错误。

  • 确保可执行文件拥有执行权限:
    # 若未自动赋予执行位。可手动添加
    chmod +x hello
    
  • 在当前目录下运行时请加前缀 ./:
    $ ./hello
    Hello,World!
  • 若出现 “cannot execute binary file”,检查是否下载了错误架构。

四、常用编译选项与多文件工程处理

-E、-S、-c 的用途概览

选项作用说明
-E仅进行预处理,输出 .i 文件;适用于调试宏展开,
-S生成汇编代码; 老实说,便于查看底层实现或手写汇编。
-c只生成目标文件,不进行链接;配合 make 可实现增量编译。
-o 指定输出文件名;省去默认 a.out 的困扰。
-IAdd directory to header search path;防止 “cannot find header” 错误。
-LAdd directory to library search path;防止 “undefined reference” 错误。
-lLink with libname.so/libname.a;解决链接缺失库的问题,

多文件项目示例

# Makefile 示例
CC = gcc
CFLAGS = -Wall -O2 -Iinclude
OBJDIR = obj
SRCS = $
OBJS = $/%.o。$)
至于$/%.o,src/%.c | $
$ $ -c $<-o $@
$:
    mkdir -p $
myapp: $
    $ $ $^ -o $@
clean:
    rm -rf $ myapp
# 使用方式:
make          # 编译整个项目
make clean    # 清理生成文件

五、多版本 GCC 管理技巧

* 痛点1:同一台机器上需要同时使用 GCC 7 与 GCC 11,切换繁琐。* 痛点2:全局升级后老项目突然报错 “unsupported option”。

SCL 切换不同版本

# 安装多个 devtoolset 套件
sudo yum install -y devtoolset-7-gcc devtoolset-7-gcc-c++
sudo yum install -y devtoolset-11-gcc devtoolset-11-gcc-c++
# 临时切换到 gcc‑7 环境
scl enable devtoolset-7 bash # 在新 bash 中生效
# 临时切换到 gcc‑11 环境
scl enable devtoolset-11 bash
# 检查当前活跃的 gcc 版本
gcc --version

Lmod / Environment Modules 替代方案

Lmod 是一种轻量级模块程序,可通过 module load/unload 管理任意方法下的 GCC。适合科研服务器或 CI 环境。

学习GCC编译器和CentOS系统,能否实现开发无忧?
# 假设已将不同版本放在 /opt/gcc/7.5 /opt/gcc/11.2
module load gcc/7.5 # 加载 GCC 7.5
module unload gcc/7.5 # 卸载
module load gcc/11.2 # 加载 GCC 11.2
# 查看当前使用的方法
which gcc
"

标签:CentOS

CentOS程序下GCC编译器使用教程 © 2023

一、安装与版本确认

在 CentOS 上进行 C/C++ 开发,最头疼的问题往往是“没有合适的编译器”或“程序自带的 GCC 过旧、缺少依赖导致编译失败”。下面一步步帮你摆脱这些痛点。其实,

学习GCC编译器和CentOS系统,能否实现开发无忧?
  • 痛点1:程序默认的 GCC 版本太低。无法满足新特性需求,
  • 痛点2:手动下载源码编译耗时且易出错。按理说,
  • 方法:使用 yum 或 SCL快速获取最新、稳定的 GCC 包。老实说,

通过 yum 安装官方仓库提供的 GCC

# 安装基本 C/C++ 编译环境
sudo yum install -y gcc gcc-c++
# 安装内核开发头文件
sudo yum install -y kernel-devel

使用 SCL 创建独立的 GCC 环境

# 添加 SCL 仓库
sudo yum install -y centos-release-scl
# 安装指定版本。例如 gcc-9
sudo yum install -y devtoolset-9-gcc devtoolset-9-gcc-c++
# 启用该版本
scl enable devtoolset-9 bash

启用后可通过以下命令确认版本:

$ gcc --version
gcc 9.x.x ...

二、GCC 基础使用

常见痛点:新手经常忘记指定输出文件名、误用选项导致“找不到符号”或“链接错误”。下面给出最简洁、最不易出错的写法。

单文件编译示例

# hello.c 为示例源文件
gcc -Wall -O2 -o hello hello.c
# 参数说明:
# -Wall 开启所有常用警告,帮助提前发现潜在错误
# -O2 合理调整。兼顾性能与编译速度
# -o 指定生成可执行文件名

C++ 文件编译示例

# hello.cpp 为示例源文件
g++ -Wall -std=c++17 -O2 -o hello_cpp hello.cpp

三、编译后运行

痛点:运行时出现 “Permission denied” 或 “No such file or directory”。这通常是因为没有执行权限或方法错误。

  • 确保可执行文件拥有执行权限:
    # 若未自动赋予执行位。可手动添加
    chmod +x hello
    
  • 在当前目录下运行时请加前缀 ./:
    $ ./hello
    Hello,World!
  • 若出现 “cannot execute binary file”,检查是否下载了错误架构。

四、常用编译选项与多文件工程处理

-E、-S、-c 的用途概览

选项作用说明
-E仅进行预处理,输出 .i 文件;适用于调试宏展开,
-S生成汇编代码; 老实说,便于查看底层实现或手写汇编。
-c只生成目标文件,不进行链接;配合 make 可实现增量编译。
-o 指定输出文件名;省去默认 a.out 的困扰。
-IAdd directory to header search path;防止 “cannot find header” 错误。
-LAdd directory to library search path;防止 “undefined reference” 错误。
-lLink with libname.so/libname.a;解决链接缺失库的问题,

多文件项目示例

# Makefile 示例
CC = gcc
CFLAGS = -Wall -O2 -Iinclude
OBJDIR = obj
SRCS = $
OBJS = $/%.o。$)
至于$/%.o,src/%.c | $
$ $ -c $<-o $@
$:
    mkdir -p $
myapp: $
    $ $ $^ -o $@
clean:
    rm -rf $ myapp
# 使用方式:
make          # 编译整个项目
make clean    # 清理生成文件

五、多版本 GCC 管理技巧

* 痛点1:同一台机器上需要同时使用 GCC 7 与 GCC 11,切换繁琐。* 痛点2:全局升级后老项目突然报错 “unsupported option”。

SCL 切换不同版本

# 安装多个 devtoolset 套件
sudo yum install -y devtoolset-7-gcc devtoolset-7-gcc-c++
sudo yum install -y devtoolset-11-gcc devtoolset-11-gcc-c++
# 临时切换到 gcc‑7 环境
scl enable devtoolset-7 bash # 在新 bash 中生效
# 临时切换到 gcc‑11 环境
scl enable devtoolset-11 bash
# 检查当前活跃的 gcc 版本
gcc --version

Lmod / Environment Modules 替代方案

Lmod 是一种轻量级模块程序,可通过 module load/unload 管理任意方法下的 GCC。适合科研服务器或 CI 环境。

学习GCC编译器和CentOS系统,能否实现开发无忧?
# 假设已将不同版本放在 /opt/gcc/7.5 /opt/gcc/11.2
module load gcc/7.5 # 加载 GCC 7.5
module unload gcc/7.5 # 卸载
module load gcc/11.2 # 加载 GCC 11.2
# 查看当前使用的方法
which gcc
"

标签:CentOS