当前位置:网站首页>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倍
边栏推荐
- 2022-07-28:以下go语言代码输出什么?A:AA;B:AB;C:BA;D:BB。 package main import ( “fmt“ ) func main() { f
- Flink实时仓库-DWD层(流量域)模板代码
- gin 中间件
- When NPM is installed, it is stuck. There are five solutions
- WPF嵌套布局案例
- 时钟树综合(一)
- 使用VsCode配置MySQL实现连接、查询、等功能
- Ansible中的变量及加密
- Vite3.0 has been released, can you still roll it (list of new features)
- gin 模版
猜你喜欢

spark学习笔记(七)——sparkcore核心编程-RDD序列化/依赖关系/持久化/分区器/累加器/广播变量

dba

MySQL----多表查询

Win11 system error: code execution cannot continue because ierutil.dll cannot be found. Reinstalling the program may fix this problem

Record - step on the pit - real-time data warehouse development - doris/pg/flink

解决CSDN因版权不明而无法发布博客的问题

约瑟夫环问题

WPF嵌套布局案例

Guess the number / / generate a random number for the first time

图像加噪声与矩阵求逆
随机推荐
接口测试实战项目03:执行测试用例
记 - 踩坑-实时数仓开发 - doris/pg/flink
怎么会不喜欢呢,CICD中轻松发送邮件
DM data guard cluster setup
我的创业邻居们
数组的子集能否累加出K
城市花样精~侬好!DESIGN#可视化电台即将开播
Pod基本介绍
VMware16创建虚拟机:无法创建新虚拟机,不具备执行此操作的权限
Homebrew brew update 长时间没反应(或卡在 Updating Homebrew...)
JS chicken laying eggs and egg laying chickens. Who appeared earlier, object or function? Is function an instance of function?
LeetCode 879. 盈利计划
Student status management system based on C language design
图像加噪声与矩阵求逆
[cf1054h] epic Revolution -- number theory, convolution, arbitrary modulus NTT
ECCV 2022 lightweight model frame Parc net press apple mobilevit code and paper Download
gin 参数验证
时钟树综合(一)
MySQL 高级(进阶) SQL 语句 (一)
Flink实时仓库-DWD层(处理复杂数据-流和表的装换处理)模板代码