当前位置: 首页 > backend >正文

GCC 使用指南

  1. 安装 GCC
    Ubuntu/Debian:
sudo apt update && sudo apt install gcc g++

CentOS/RHEL:

sudo yum install gcc gcc-c++

macOS (通过 Homebrew):

brew install gcc
  1. 基本用法

编译 C 程序

gcc hello.c -o hello  # 编译 hello.c,生成可执行文件 hello
./hello              # 运行程序

编译 C++ 程序

g++ hello.cpp -o hello
./hello
  1. 常用编译选项

选项 作用

-o <文件名> 指定输出文件名
-O0 / -O1 / -O2 / -O3 优化级别(默认 -O0,不优化)
-Wall 启用所有警告(强烈建议开启)
-Werror 将警告视为错误
-g 生成调试信息(用于 GDB 调试)
-I<目录> 指定头文件搜索目录
-L<目录> 指定库文件搜索目录
-l<库名> 链接动态库(如 -lm 链接数学库)
-std=<标准> 指定语言标准(如 -std=c11 或 -std=c++17)

  1. 多文件编译

直接编译多个文件

gcc main.c utils.c -o program  # 编译并链接所有文件

分步编译(推荐)

gcc -c main.c -o main.o        # 生成 main.o
gcc -c utils.c -o utils.o      # 生成 utils.o
gcc main.o utils.o -o program  # 链接生成可执行文件
  1. 静态库与动态库

创建静态库

gcc -c mylib.c -o mylib.o      # 编译为对象文件
ar rcs libmylib.a mylib.o      # 打包为静态库
gcc main.c -L. -lmylib -o app  # 使用静态库

创建动态库(共享库)

gcc -fPIC -c mylib.c -o mylib.o        # 编译为位置无关代码
gcc -shared mylib.o -o libmylib.so     # 生成动态库
gcc main.c -L. -lmylib -o app          # 使用动态库

运行时需指定库路径:

export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH

./app
  1. 高级选项

预处理(生成预处理后的代码)

gcc -E main.c -o main.i  # 查看宏展开后的代码

生成汇编代码

gcc -S main.c -o main.s  # 生成汇编文件

指定头文件/库路径

gcc main.c -I/my/include/path -L/my/lib/path -lmylib
```bash
7. 完整示例
假设项目结构如下:
```bash
project/
├── src/
│   ├── main.c
│   └── utils.c
└── include/└── utils.h

编译命令:

gcc -Iinclude/ -c src/main.c -o main.o
gcc -Iinclude/ -c src/utils.c -o utils.o
gcc main.o utils.o -o app

运行:

./app
  1. 常见问题

错误:找不到头文件
使用 -I 指定头文件目录:

gcc -I/path/to/headers ...

错误:未定义的引用
确保链接了所需的库(如数学库 -lm)。

动态库运行时找不到
设置 LD_LIBRARY_PATH:

export LD_LIBRARY_PATH=/path/to/libs:$LD_LIBRARY_PATH

掌握这些命令后,您已能应对大多数 C/C++ 编译场景!如需进一步学习,可通过 man gcc查阅手册。

http://www.xdnf.cn/news/3936.html

相关文章:

  • 具身系列——Q-Learning算法实现CartPole游戏(强化学习)
  • 实时操作系统与AI Agent的协同进化:重塑人形机器人产业格局
  • 「分享」学术工具
  • vae笔记
  • P4549 【模板】裴蜀定理
  • Android第三次面试总结之Java篇补充
  • 不定长滑动窗口(求最短/最小)
  • [运维]Linux安装、配置并使用atop监控工具
  • Spring MVC常见注解详解
  • 力扣1128题解
  • sql错题(1)
  • ssh连接云服务器记录
  • 一种实波束扫描雷达角超分辨方法——论文阅读
  • Delphi创建IIS虚拟目录的方法
  • StampLock的源码详细剖析
  • SSE技术的基本理解以及在项目中的使用
  • 商场防损部绩效考核制度与管理方法
  • 【操作系统】读者-写者问题
  • Git_.gitignore文件简介及使用
  • C与指针——输入输出
  • 什么是constexpr?
  • 解决:前后端跨域请求
  • 【Redis】Java操作Redis之SpringDataRedis
  • 洛谷 P1495:【模板】中国剩余定理(CRT)/ 曹冲养猪
  • 数字化转型-4A架构之业务架构
  • 深度优先搜索(DFS)与广度优先搜索(BFS):图与树遍历的两大利器
  • 74HC123的电路应用场景
  • 一键获取当前项目的所有文件结构并保存到文本文件
  • 【数据结构与算法】常见排序算法详解(C++实现)
  • Java大师成长计划之第12天:性能调优与GC原理