006.gcc编译器

简介: gcc是什么?

gcc是什么?

20210425012142555.png

gcc所遵循的部分约定规则:


.c为后缀的文件,C语言源代码文件; .a为后缀的文件,是由目标文件构成的档案库文件; .C,.cc或.cxx

为后缀的文件,是C++源代码文件且必须要经过预处理; .h为后缀的文件,是程序所包含的头文件; .i

为后缀的文件,是C源代码文件且不应该对其执行预处理; .ii为后缀的文件,是C++源代码文件且不应该对其执行预处理;

.m为后缀的文件,是Objective-C源代码文件; .mm为后缀的文件,是Objective-C++源代码文件;

.o为后缀的文件,是编译后的目标文件; .s为后缀的文件,是汇编语言源代码文件; .S为后缀的文件,是经过预编译的汇编语言源代码文件。


以上内容来自百度百科


查看版本号

-v / --version

产生目标文件

-o

-o output_filename,确定输出文件的名称为output_filename,同时这个名称不能和源文件同名。如果不给出这个选项,gcc就给出预设的可执行文件a.out。


指定头文件目录

-I+目录


编译时定义宏

-D

编译优化


-On n=0∼3

-O0 - 没有优化

-O1 - 缺省值

-O3 - 优化级别最高

-O,对程序进行优化编译、连接,采用这个选项,整个源代码会在编译、连接过程中进行优化处理,这样产生的可执行文件的执行效率可以提高,但是,编译、连接的速度就相应地要慢一些。

-O2,比-O更好的优化编译、连接,当然整个编译、连接过程会更慢。

-Idirname,将dirname所指出的目录加入到程序头文件目录列表中,是在预编译过程中使用的参数。


提示更多警告信息

-Wall


只编译子程序

-c


-c,只编译,不连接成为可执行文件,编译器只是由输入的.c等源代码文件生成.o为后缀的目标文件,通常用于编译不包含主程序的子程序文件。


生成预处理文件

-E

包含调试信息

-g (gdb调试的时候必须加此参数)

-g,产生符号调试工具(GNU的gdb)所必要的符号资讯,要想对源代码进行调试,我们就必须加入这个选项。

虽然有很多东西但是我们一般执行的命令就是

gcc 或者 g++ -o

示例:


必要的安装包:


sudo apt-get install vim


sudo apt-get install g++

sudo apt-get install gcc


下面测试进行测试g++(gcc同理):


下面是一个保存在文件 helloworld.cpp 中一个简单的 C++ 程序的代码:

vim hello.cpp

#include <iostream>  
int main(void){
    std::cout << "hello, world" << std::endl;
    return(0);
}
如果没有设置tab缩进可能会出现下面的情况


20210425021506559.png

在命令行模式输入:gg=G 自动缩进,变为标准格式。

       20210425021603604.png                        


程序使用定义在头文件 iostream 中的 cout,向标准输出写入一个简单的字符串。该代码可用以下命令编译为可执行文件:

g++ hello.cpp

若是c语言直接用 gcc而不是g++了。

20210425021643325.png

编译器 g++ 通过检查命令行中指定的文件的后缀名可识别其为 C++源代码文件。编译器默认的动作:编译源代码文件生成对象文件(object file),链接对象文件和 libstdc++ 库中的函数得到可执行程序。然后删除对象文件。由于命令行中未指定可执行程序的文件名,编译器采用默认的 a.out。程序可以这样来运行:


./a.out

20210425021745917.png

因为有时候一个文件须有多个.c/.cpp需要编译总不能都是a.out吧,所以呢更普遍的做法是通过 -o 选项指定可执行程序的文件名。下面的命令将产生名为 helloworld 的可执行文件:


$ g++ hello.cpp -o hello

20210425021853973.png

在命令行中输入程序名可使之运行:

./helloworld

2021042502190580.png 

目录
打赏
0
1
1
0
4
分享
相关文章
深入理解GCC 和 G++ 编译器
GCC 和 G++ 是 GNU 工具链中的核心编译器,支持 C 和 C++ 程序开发。本文详细介绍其编译流程、常用选项及动态链接与静态链接的区别。编译过程分为预处理、编译、汇编和链接四个阶段,每个阶段有特定任务和命令选项。常用选项如 `-E`、`-S`、`-c` 和 `-o` 分别用于预处理、生成汇编代码、生成目标文件和指定输出文件。动态链接节省空间且易于更新,但依赖运行时库;静态链接独立高效,但文件较大且更新困难。合理选择优化选项(如 `-O0` 至 `-O3`)可提升程序性能。掌握这些知识有助于开发者更高效地编写、调试和优化代码。
60 23
深入理解GCC 和 G++ 编译器
gcc的编译过程
GCC(GNU Compiler Collection)的编译过程主要包括四个阶段:预处理、编译、汇编和链接。预处理展开宏定义,编译将代码转换为汇编语言,汇编生成目标文件,链接将目标文件与库文件合并成可执行文件。
136 11
|
4月前
|
1.8.3 GNU编译器集合和LLVM项目
GNU项目自1987年起致力于开发自由UNIX软件,其成果之一GNU编译器集合(GCC)在指导委员会领导下持续演进,紧跟C语言标准。GCC适用于多种平台如UNIX、Linux和Windows,并常通过gcc或cc命令调用。另一方面,起源于2000年伊利诺伊大学研究项目的LLVM,提供了另一种开源编译器集合,其Clang编译器处理C代码,自2012年起成为FreeBSD默认C编译器,并良好支持最新C标准。
53 1
MinGW安装gcc
MinGW安装gcc
132 0
技术经验解读:【转载】详解GCC的下载和安装(源码安装)
技术经验解读:【转载】详解GCC的下载和安装(源码安装)
270 0
关于如何解决mingw64安装后配置完环境变量仍然执行不了gcc命令
关于如何解决mingw64安装后配置完环境变量仍然执行不了gcc命令
|
9月前
|
gcc的简易用法(编译、参数与链接)
【5月更文挑战第14天】gcc的简易用法(编译、参数与链接)。
75 1