细谈linux gcc的入门相关知识和用法(超详细)

简介: 第一:linux gcc包含的c/c++编译器 gcc 、cc 、c++ 、g++第二:gcc特点第三:gcc的运行过程第四:gcc选项第五:gcc所遵循的部分约定规则

目录


第一:linux gcc包含的c/c++编译器  gcc  、cc  、c++  、g++


第二:gcc特点


第三:gcc的运行过程


第四:gcc选项


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


第一:linux gcc包含的c/c++编译器  gcc  、cc  、c++  、g++

其中gcc和cc是一样的,c++和g++是一样的,一般c语言程序就用gcc编译,c++程序就用g++编译。


第二:gcc特点

gcc是一个可移植的编译器,支持多种硬件平台。例如ARM、X86等等。

gcc不仅是个本地编译器,它还能跨平台交叉编译。所谓的本地编译器,是指编译出来的程序只能够在本地环境进行运行。而gcc编译出来的程序能够在其他平台进行运行。

gcc有多种语言前端,用于解析不同的语言另外gcc是按模块化设计的,可以加入新语言和新CPU架构的支持。gcc是自由软件。任何人都可以使用或更改这个软件。


第三:gcc的运行过程

(1)在命令行输入:   gcc  test.c


这样会默认编译出一个名为  a.out的程序,


再在命令行输入 :./a.out


就可以运行程序。  


(2)如果在命令行输入: gcc  test.c  -o  test


这样将编译出一个名为test的程序


再在命令行输入 :./test


就可以运行程序。


 注:其中  -o 参数  用来指定生成程序的名字


(3)分步执行,更具体形象


其中包含4个过程:


1.预处理


本质 会进行4个操作(包括头文件的展开、去掉注释、宏替换、条件编译)、


具体操作:命令行输入:  gcc -E  test.c  -o test.i


这句命令意思是:走完预处理第一步就会停下来,将产生的临时内容存放在 test.i文件中


2.编译


本质 就是把c语言变成汇编语言


具体操作:命令行输入: gcc -S  test.i  -o test.s


这句命令意思是: 走完编译第二步就会停下来,将产生的临时内容存放在 test.s文件中


3.汇编


本质 就是把汇编语言变成目标二进制文件(不可执行)


具体操作:命令行输入: gcc -c  test.s -o test.o


这句命令意思是:走完汇编第三步就会停下来,将产生的临时内容存放在 test.o文件中


4.链接


本质 就是引入我们在代码中使用的第三方库生成可执行文件或库文件


(第三方库由编译器和文件后缀共同决定)


第四:gcc选项

-E 只进行预处理操作

-S 编译到汇编停止(不进行汇编,只完成预处理和编译)

-c 进行汇编操作(编译到汇编代码)

-O[0,1,2,3]


优化程序(默认为2级优化,0不优化,3优化级别最高)

-static 对生成的文件采用静态链接

-shared 尽量使用动态库

-Idir

将dir目录加入搜索头文件的目录路径


-Ldir

将dir目录加入搜索库的目录路径


-llib

连接lib库


-Wall 使gcc对源文件的代码有问题的地方发出警告信息

-W 不发出警告信息

-g 在目标文件中生成调试信息,以便gdb之类的调试程序调试

-ggdb 生成更多调试信息

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

首先先谈一个概念,不是说linux中一切都是文件吗?后缀没有用吗?但在gcc中,后缀是非常重要的,用来区分文件的类别。我简单总结了几种后缀:


后缀                                      类别

.c                            C语言源代码文件

.C /   .cc /   .cxx                             C++源代码文件

.h                            程序所包含的头文件

.i                            已经预处理过的C源代码文件

.ii                            已经预处理过的C++源代码文件

.a                            由目标文件构成的库文件

.o                             编译后的目标文件

.s                             汇编语言源代码文件

.S                              经过预编译的汇编语言源代码文件

.m                              Objective-C源代码文件



目录
相关文章
|
17天前
|
存储 Linux Android开发
Volatility3内存取证工具安装及入门在Linux下的安装教程
Volatility 是一个完全开源的工具,用于从内存 (RAM) 样本中提取数字工件。支持Windows,Linux,MaC,Android等多类型操作系统系统的内存取证。针对竞赛这块(CTF、技能大赛等)基本上都是用在Misc方向的取证题上面,很多没有听说过或者不会用这款工具的同学在打比赛的时候就很难受。以前很多赛项都是使用vol2.6都可以完成,但是由于操作系统更新,部分系统2.6已经不支持了,如:Win10 等镜像,而Volatility3是支持这些新版本操作系统的。
|
8天前
|
Shell Linux 网络安全
Linux怎样在使用ssh 链接时就指定gcc 的版本
Linux怎样在使用ssh 链接时就指定gcc 的版本
19 7
|
7天前
|
Linux vr&ar C语言
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
Linux怎样更新Centos下Gcc版本支持C17?Centos7快速安装gcc8.3.1 可支持C++17(附gcc相关链接整理)
29 2
|
8天前
|
Ubuntu Linux 编译器
当自身需要使用的 gcc版本 和Linux 默认版本 存在大版本差异时怎样处理
当自身需要使用的 gcc版本 和Linux 默认版本 存在大版本差异时怎样处理
18 2
|
12天前
|
存储 Linux 数据库
【Linux】Linux基础文件与目录管理:成为Linux大师的入门必修课
【Linux】Linux基础文件与目录管理:成为Linux大师的入门必修课
22 3
|
15天前
|
Linux Unix 安全
【Linux终端探险】:从入门到熟练,玩转基础命令的秘密(一)
【Linux终端探险】:从入门到熟练,玩转基础命令的秘密(一)
|
15天前
|
Linux 开发工具
【Linux文本编辑艺术】:从入门到熟练,Vim大师之路揭秘
【Linux文本编辑艺术】:从入门到熟练,Vim大师之路揭秘
|
15天前
|
Linux Unix Windows
【Linux终端探险】:从入门到熟练,玩转基础命令的秘密(二)
【Linux终端探险】:从入门到熟练,玩转基础命令的秘密(二)
|
21天前
|
XML Linux API
探索Linux中的dbus-binding-tool:理解其用途与用法
`dbus-binding-tool`是Linux D-Bus工具集的一部分,用于从XML接口描述生成语言绑定代码,简化D-Bus服务在应用程序中的集成。它支持自动代码生成,多种语言(如C、C++、Python),并提供灵活性以适应特定需求。使用步骤包括获取XML描述文件,运行工具生成代码,然后在应用中使用生成的API。注意版本兼容性、错误处理,并参考官方文档和示例以优化使用。该工具助力开发人员高效实现进程间通信和系统服务集成。
|
23天前
|
Unix Linux 应用服务中间件
Linux 命令行工具:lsof 入门指南
`lsof` 命令详解:用于列出系统中打开的文件,包括进程、网络连接、管道等。通过 `-p` 查看指定进程文件,`-u` 查看用户文件,`-i` 查看网络连接。还能定位占用端口的进程,显示已删除但仍在使用的文件,以及分析程序如何操作文件。是Linux用户问题定位和性能优化的得力助手。学习并熟练运用 `lsof` 可提升工作效率。
23 2