学习GCC编译器和CentOS系统,能否实现开发无忧?
- 内容介绍
- 文章标签
- 相关推荐
CentOS程序下GCC编译器使用教程 © 2023
一、安装与版本确认
在 CentOS 上进行 C/C++ 开发,最头疼的问题往往是“没有合适的编译器”或“程序自带的 GCC 过旧、缺少依赖导致编译失败”。下面一步步帮你摆脱这些痛点。其实,
- 痛点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 的困扰。 |
| -I | Add directory to header search path;防止 “cannot find header” 错误。 |
| -L | Add directory to library search path;防止 “undefined reference” 错误。 |
| -l | Link 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 环境。
# 假设已将不同版本放在 /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程序下GCC编译器使用教程 © 2023
一、安装与版本确认
在 CentOS 上进行 C/C++ 开发,最头疼的问题往往是“没有合适的编译器”或“程序自带的 GCC 过旧、缺少依赖导致编译失败”。下面一步步帮你摆脱这些痛点。其实,
- 痛点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 的困扰。 |
| -I | Add directory to header search path;防止 “cannot find header” 错误。 |
| -L | Add directory to library search path;防止 “undefined reference” 错误。 |
| -l | Link 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 环境。
# 假设已将不同版本放在 /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
"
