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 

目录
相关文章
|
4月前
|
前端开发 C语言
gcc动态库升级
gcc动态库升级
|
2月前
|
编译器 Linux C语言
gcc的编译过程
GCC(GNU Compiler Collection)的编译过程主要包括四个阶段:预处理、编译、汇编和链接。预处理展开宏定义,编译将代码转换为汇编语言,汇编生成目标文件,链接将目标文件与库文件合并成可执行文件。
83 11
|
2月前
|
Unix 编译器 Linux
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标准。
36 1
|
4月前
|
编译器 开发工具 C语言
Gcc 链接文件
Gcc 链接文件
42 4
|
4月前
|
编译器 C语言 C++
MinGW安装gcc
MinGW安装gcc
97 0
|
6月前
|
自然语言处理 编译器 Go
GCC:GNU编译器
GCC:GNU编译器
|
6月前
|
Java 编译器 Linux
技术经验解读:【转载】详解GCC的下载和安装(源码安装)
技术经验解读:【转载】详解GCC的下载和安装(源码安装)
196 0
|
6月前
|
C语言
关于如何解决mingw64安装后配置完环境变量仍然执行不了gcc命令
关于如何解决mingw64安装后配置完环境变量仍然执行不了gcc命令
|
7月前
|
C语言
gcc的简易用法(编译、参数与链接)
【5月更文挑战第14天】gcc的简易用法(编译、参数与链接)。
64 1
|
7月前
|
Unix Java 编译器
安装gcc
【5月更文挑战第14天】安装gcc。
125 1