建站提交历史文章,原文写作时间 2023 年 2 月前后。

GCC/G++ 基本使用

介绍

  • GCC原名GNU C Complier,GNU C语言编译器。现在GCCGNU Complier Collection,由GNU开发的编译器套件,支持多种语言的编译,包括:CC++Objective-CJavaAda以及Go语言前端。

  • 安装:sudo apt install gcc g++

  • 标准:GCC/G++支持多种C语言C++标准,编译参数为:-std=C99

  • 版本:gcc/g++ -v/--version

工作原理

  1. 预处理器:对C/C++代码进行预处理,包括消除注释、宏替换、头文件展开与优化

常用命令

命令 描述
gcc test.c 生成可执行文件 a.out
gcc test.c -o test 生成可执行文件 test
gcc test.c -c -o test.o 生成目标代码 test.o
gcc test.c -o test -I include -L lib -l libxxx.a 指定头文件与库文件搜索目录
gcc test.c -D DEBUG -o test 生成宏 DEBUG
开关 描述
-o 生成文件,否则某些情况下将打印至命令行并不生成文件
-E 生成预处理代码
-S 生成汇编代码
-c 生成目标代码
-g 生成调试信息,该程序可以被调试器调试
-D * 生成宏
-w 不生成任何警告
-Wall 生成所有警告
-O* 开启编译器优化,包括-O0-O1(默认)、-O2-O3
-II * 指定头文件搜索目录
-L * 指定库文件搜索目录
-ll 指定导入的库文件
-fpic/-fPIC 生成与位置无关的代码
-shared 生成共享文件
-std * 指定C语言/C++标准

GCC与G++的区别

  1. GCC可以编译C++代码,但是不能完成C++代码的链接,G++在编译代码时会调用GCC,例如,以下是等价的:
1
$ g++ test.cpp -o test
1
2
$ gcc test.cpp -c -o test.o  // 使用GCC生成目标代码
$ g++ test.o -o test // G++仅用于链接代码
  1. 使用G++/GCC编译会生成__cplusplus宏。

编译器与源文件后缀与是否生成__cplusplus宏的关系后缀编译器GCCG++.c.cpp编译器与源文件后缀与是否生成\_\_cplusplus宏的关系 \\ \begin{array}{c|cc} {_{后缀}}{^{编译器}} & GCC & G++ \\ \hline .c & 否 & 是 \\ .cpp & 是 & 是 \\ \end{array}