GCC编译器使用详解

张开发
2026/4/9 3:31:18 15 分钟阅读

分享文章

GCC编译器使用详解
GCC编译器使用详解GCCGNU Compiler Collection是Linux平台上最广泛使用的编译器。理解GCC的编译过程和选项对于开发高效、可靠的程序至关重要。一、GCC编译流程1.1 四个阶段源文件(.c) → 预处理(.i) → 编译(.s) → 汇编(.o) → 链接(可执行文件)详细步骤# 1. 预处理展开宏、处理条件编译gcc-Ehello.c-ohello.i# 2. 编译生成汇编代码gcc-Shello.i-ohello.s# 3. 汇编生成目标文件gcc-chello.s-ohello.o# 4. 链接生成可执行文件gcc hello.o-ohello# 一步完成gcc hello.c-ohello1.2 各阶段说明阶段输入输出操作预处理.c.i展开宏、处理#include编译.i.s生成汇编代码汇编.s.o生成二进制目标链接.o可执行链接库函数二、常用编译选项2.1 基本选项# 指定输出文件名gcc hello.c-ohello# 只编译不链接gcc-chello.c# 指定头文件路径gcc hello.c -I./include-ohello# 指定库文件路径gcc hello.c -L./lib-lmylib-ohello# 定义宏gcc hello.c-DDEBUG-ohello gcc hello.c-DVERSION2-ohello2.2 优化选项# 无优化默认gcc-O0hello.c-ohello# 基本优化gcc-O1hello.c-ohello# 标准优化gcc-O2hello.c-ohello# 最高优化gcc-O3hello.c-ohello# 优化体积gcc-Oshello.c-ohello2.3 调试选项# 生成调试信息gcc-ghello.c-ohello# 生成详细调试信息gcc-g3hello.c-ohello# 显示所有警告gcc-Wallhello.c-ohello# 将警告视为错误gcc-Werrorhello.c-ohello2.4 标准选项# 指定C标准gcc-stdc89 hello.c-ohello gcc-stdc99 hello.c-ohello gcc-stdc11 hello.c-ohello# 指定C标准g-stdc11 hello.cpp-ohello g-stdc17 hello.cpp-ohello三、静态库与动态库3.1 静态库创建静态库# 1. 编译目标文件gcc-cmylib.c-omylib.o# 2. 创建静态库ar rcs libmylib.a mylib.o# 查看库内容ar-tvlibmylib.a使用静态库# 方式1直接指定库文件gcc main.c lib/libmylib.a -I./include-oapp# 方式2使用-l和-Lgcc main.c -I./include -L./lib-lmylib-oapp静态库特点程序运行时不需要库文件程序体积较大库更新需要重新编译3.2 动态库创建动态库# 编译为位置无关代码gcc-fPIC-cmylib.c-omylib.o# 创建动态库gcc-sharedmylib.o-olibmylib.so# 或者一步完成gcc-fPIC-sharedmylib.c-olibmylib.so使用动态库gcc main.c -L./lib-lmylib-oapp# 运行时指定库路径exportLD_LIBRARY_PATH./lib:$LD_LIBRARY_PATH./app动态库特点程序运行时需要库文件程序体积小库更新无需重新编译3.3 库的优缺点特性静态库动态库加载速度快慢程序大小大小更新便利差好部署依赖无需要库四、多文件编译4.1 单独编译# 目录结构# project/# ├── main.c# ├── utils.c# └── utils.h# 方式1一起编译gcc main.c utils.c-oapp# 方式2分别编译后链接gcc-cmain.c-omain.o gcc-cutils.c-outils.o gcc main.o utils.o-oapp4.2 头文件处理# 头文件在不同目录gcc main.c -I./include -I../common-oapp4.3 链接库# 链接数学库gcc math_app.c-lm-oapp# 链接线程库gcc thread_app.c-lpthread-oapp# 链接多个库gcc app.c-lm-lpthread-lcurl-oapp五、常用选项速查选项说明-E只预处理-S只编译到汇编-c只编译不链接-o指定输出文件名-I指定头文件路径-L指定库文件路径-l指定链接的库-D定义宏-U取消宏定义-g生成调试信息-Wall显示所有警告-Werror警告视为错误-O0-3优化级别-std指定语言标准-fPIC位置无关代码-shared创建动态库-static静态链接六、总结GCC是Linux开发的核心工具编译流程预处理→编译→汇编→链接常用选项-o、-I、-L、-l、-D、-g、-Wall库管理静态库(.a)、动态库(.so)优化-O0到-O3不同级别

更多文章