1.2 GCC/G++ 基本使用
1.2.1 介绍
-
GCC原名GNU C Complier,GNU C语言编译器。现在GCC,GNU Complier Collection,由GNU开发的编译器套件,支持多种语言的编译,包括:C、C++、Objective-C、Java、Ada以及Go语言前端。 -
安装:
sudo apt install gcc g++ -
标准:
GCC/G++支持多种C语言与C++标准,编译参数为:-std=C99。 -
版本:
gcc/g++ -v/--version
1.2.2 工作原理

- 预处理器:对C/C++代码进行预处理,包括消除注释、宏替换、头文件展开与优化
1.2.3 常用命令
| 命令 | 描述 |
|---|---|
| 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。 |
| - I I I * | 指定头文件搜索目录 |
| -L * | 指定库文件搜索目录 |
| - l l l | 指定导入的库文件 |
| -fpic/-fPIC | 生成与位置无关的代码 |
| -shared | 生成共享文件 |
| -std * | 指定C语言/C++标准 |
1.2.4 GCC与G++的区别
- GCC可以编译C++代码,但是不能完成C++代码的链接,G++在编译代码时会调用GCC,例如,以下是等价的:
$ g++ test.cpp -o test
$ gcc test.cpp -c -o test.o // 使用GCC生成目标代码
$ g++ test.o -o test // G++仅用于链接代码
- 使用G++/GCC编译会生成__cplusplus宏。
编译器与源文件后缀与是否生成 _ _ c p l u s p l u s 宏的关系 后缀 编译器 G C C G + + . c 否 是 . c p p 是 是 编译器与源文件后缀与是否生成\_\_cplusplus宏的关系 \\ ~\\ \begin{array}{c|cc} {_{后缀}}{^{编译器}} & GCC & G++ \\ \hline .c & 否 & 是 \\ .cpp & 是 & 是 \\ \end{array} 编译器与源文件后缀与是否生成__cplusplus宏的关系 后缀编译器.c.cppGCC否是G++是是
GCC(GNUCompilerCollection)是GNU开发的多语言编译器,支持C、C++等语言。G++是GCC的C++前端,用于C++的编译和链接。文章介绍了GCC和G++的基本使用,包括预处理器的工作原理、常用编译命令,如-E、-S、-c、-o、-g等选项,以及如何指定头文件和库文件路径。此外,还讨论了GCC与G++在处理C++源文件时的区别,以及它们与__cplusplus宏的关系。

2010

被折叠的 条评论
为什么被折叠?



