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

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查阅手册。

相关文章:

  • idea创建springboot工程-指定阿里云地址创建工程报错
  • Spring AI聊天模型API:轻松构建智能聊天交互
  • 每日c/c++题 备战蓝桥杯(洛谷P1190 [NOIP 2010 普及组] 接水问题)
  • 【心海资源】子比主题新增注册与会员用户展示功能模块及实现方法
  • Maven框架详解:构建与依赖管理的利器
  • Linux 入门:操作系统进程详解(上)
  • ARM Linux 设备树
  • 视频编解码学习三之显示器
  • 2021年第十二届蓝桥杯省赛B组Python题解
  • 第三节:OpenCV 基础入门-安装与配置 OpenCV (Python/C++ 环境)
  • 五四青年节|模糊的青春岁月,用视频高清修复工具,让回忆更清晰!
  • C++ 的类型排序
  • 【PostgreSQL数据分析实战:从数据清洗到可视化全流程】3.1 数据质量评估指标(完整性/一致性/准确性)
  • Git 命令
  • Spring Cloud Gateway MVC 基于 Spring Boot 3.4 以 WAR 包形式部署于外部 Tomcat 实战
  • 高性能数据库架构探索:OceanBase 分布式技术深入解析
  • 【沐风老师】3DMAX按元素UV修改器插件教程
  • 为了结合后端而学习前端的学习日志——【黑洞光标特效】
  • JavaWeb:SpringBootWeb增删改查案例
  • 【数据结构与算法】常见排序算法详解(C++实现)
  • 局势紧张之际,伊朗外长下周访问巴基斯坦和印度
  • 解放日报头版:上海张江模力社区托举“年轻的事业”
  • 美妙的下午
  • 五一假期旅游大市党政领导靠前调度,重视解决游客反映的问题
  • 跳水世界杯女子单人10米台决赛,陈芋汐、全红婵包揽金银牌
  • 云南省政协原党组成员、秘书长车志敏接受审查调查