当前位置:网站首页>gcc/g++的使用
gcc/g++的使用
2022-07-29 06:45:00 【爱学代码的学生】
目录
1. 什么是gcc/g++?
gcc/g++是一种编译器,用来将C/C++语言转换成机器语言
2. gcc是如何完成转换?
格式:gcc [选项] 编译的文件 [选项] [目标文件]
如果直接进行gcc [编译文件] -o [目标文件],则会直接生成可执行文件
gcc将高级语言转换成机器语言分为四个步骤:
1. 预处理
预处理中主要包含了四个步骤
- 头文件的展开
- 宏替换
- 注释替换
- 条件编译
格式:gcc -E test.c -o test.i

我们可以看见预处理阶段完成了我们所说的所有步骤
2. 编译
编译的最主要功能将高级语言转换成汇编语言
格式:gcc -S test.i -o test.s

汇编语言比起高级语言更加简洁
3. 汇编
编译的最重要步骤是将汇编语言转换成二进制语言,也就是机器可识别代码
格式:gcc -c test.s -o test.o

4. 链接
在生成.o结尾的文件后就标识着编译成功,接着我们就需要进行链接
格式:gcc test.o -o test

这里我们需要涉及一个重要的知识点,那就是我们为什么要进行链接?
我们已经将我们的代码编译成功了,链接的作用又是什么呢?

我们可以发现我们所写的代码中,包含了printf函数,而print这个函数是我们所实现的吗?明显不是,那我们调用这个函数就需要完成这个函数的实现,又因为我们没有完成这个函数的实现,但是库中实现了这个函数,因此我们在进行链接的时候是链接的那些库,以供我们完成运行。
库分为静态库和动态库
静态库是指编译链接时,将所实现的函数代码全部加入进可执行文件中,因此生成的文件比较大,但是在运行中就不需要在链接库函数
动态库是指编译链接时,没有将所实现的函数代码加入在可执行文件中,而是在链接期间链接了所需的库,这样可以节省空间
在Linux中,默认链接的是动态库

而我们也可以主动链接静态库

我们发现当链接静态库时,内存大小几乎是链接动态库的100倍
边栏推荐
- Student status management system based on C language design
- 后缀自动机(SAM)讲解 + Luogu p3804【模板】后缀自动机 (SAM)
- 图像加噪声与矩阵求逆
- resize2fs: 超级块中的幻数有错(Bad magic number in super-block )
- fillder使用
- MutationObserver文档学习
- 我的个人网站不让接入微信登录,于是我做了这个
- Flink实时仓库-DWD层(交易域-加购维度退化处理)模板代码
- [C language brush leetcode] 1054. Bar code with equal distance (m)
- 【C语言刷LeetCode】67. 二进制求和(E)
猜你喜欢

接口测试实战项目03:执行测试用例

VMware16创建虚拟机:Win11无法安装

Problems encountered in vmware16 installing virtual machines

对Vintage分析的一些学习理解

Flink实时仓库-DWD层(交易域-加购维度退化处理)模板代码

【OpenGL】着色器(Shader)的使用

Thread synchronization - producers and consumers, tortoise and rabbit race, dual thread printing

Improved Pillar with Fine-grained Feature for 3D Object Detection论文笔记

Why does ETL often become ELT or even let?

我的个人网站不让接入微信登录,于是我做了这个
随机推荐
Flink real-time warehouse DWD layer (transaction domain - additional purchase dimension degradation processing) template code
Fillder use
JS 鸡生蛋与蛋生鸡问题,Object与Function究竟谁出现的更早?Function算不算Function的实例?
ERROR 1045 (28000) Access denied for user ‘root‘@‘localhost‘解决方法
20-40k | mecarmand 3D vision algorithm / software / Product Manager Recruitment
npm install报错npm ERR Could not resolve dependency npm ERR peer
个人博客系统(附源码)
Redis基础篇
gin 中间件
2022-07-28: what is the output of the following go language code? A:AA; B:AB; C:BA; D:BB。 package main import ( “fmt“ ) func main() { f
JS chicken laying eggs and egg laying chickens. Who appeared earlier, object or function? Is function an instance of function?
Homebrew brew update 长时间没反应(或卡在 Updating Homebrew...)
外包干了3年,跳槽后转自动化测试工资是原来的2倍,秘诀原来是......
【C语言刷LeetCode】2332. 坐上公交的最晚时间(M)
VMware16创建虚拟机:Win11无法安装
MySQL - multi table query
Student status management system based on C language design
Redis Basics
Flink real-time warehouse DWD layer (processing complex data - installation and replacement of streams and tables) template code
Kubernetes (V) -- deploy kubernetes dashboard