gcc 编译选项总结

有用的编译选项

编译选项说明
-save-temps保存生成的预处理 .i、编译.s、汇编 .o生成的临时文件
-dM生成预定义的宏信息
-###打印(不执行)gcc 调用的各个子命令
-v可以打印出 gcc 搜索头文件的路径和顺序
-Q --help=optimizers打印优化选项
-fdiagnostics-color通过定义环境变量GCC_COLORS来彩色打印诊断信息
-print-file-name显示出 gcc 究竟会连接哪个 libc 库
-P去掉预处理时生成的行号标记
-DMACRO命令行中预定义一个宏
-UMACRO命令行中取消一个宏
-Wa,option将选项option传递给汇编器
-Wa,-L在目标文件中保留局部符号
-fverbose-asm生成带有详细信息的汇编文件
-fsanitize=address生成能检查内存访问错误的可执行文件
-fsanitize=thread -fPIE -pie生成能检查数据竞争的可执行文件
-Wl,option将选项option传递给连接器
-Wl,-Map=o.map让连接器生成内存映射文件
__attribute__ ((__used__))禁止函数被优化掉
__attribute__ ((always_inline))强制函数永远以 inline 的形式调用
-fsyntax-only只做语法检查,不进行实际的编译输出
-Wall打开警告信息
-x指定语言类型
-fpack-struct=2改变结构体成员的字节对齐

常用的系统库

库名称GCC 链接命令作用
math (数学库)-lm三角函数、对数、指数等
pthread (多线程库)-lpthreadPOSIX 线程
dl (动态链接库加载)-ldldlopen / dlsym
rt (实时库)-lrt高精度定时器、实时功能
zlib (压缩库)-lz压缩与解压缩
ssl/crypto-lssl -lcryptoOpenSSL 安全加密库
curl-lcurl网络库,支持 HTTP/FTP 等

常用的第三方库

库名称GCC 链接方式说明
OpenCV-lopencv_core -lopencv_imgproc ...图像处理与计算机视觉
FFmpeg-lavcodec -lavformat -lavutil ...音视频编解码
SQLite-lsqlite3轻量级数据库
Boost-lboost_system -lboost_filesystem ...通用 C++ 库
protobuf-lprotobufGoogle 协议缓冲区
json-c-ljson-cC 语言 JSON 解析库
yaml-cpp-lyaml-cppC++ YAML 解析库

参考

  1. 100 个 gcc 小技巧