gcc,g++

1.vim配置问题

我们刚开始的vim,没有自动缩进,自动补全等,这让我们写C语言代码很麻烦,vim配套的有一个vimrc文件,这个文件可以配置我们的vim使他具备了这些功能

我们可以在gitee上面配置好vim环境,这样我们写代码就会很方便

我们之前使用sudo的时候,我们需要在在配置文件里面添加,这个用户,当我们学习了vim之后这个可以自己做了

2.gcc g++

2.1gccVSg++

gcc:C语言编译器只能用来编C语言

g++:c++,c均可以编写

2.2程序翻译的过程

1.预处理

2.编译

3.汇编

4.链接

2.2.1预处理

预处理阶段分为四个

a头文件展开

b1去注释

c宏替换

d条件编译

我们要是直接运行一个写好的代码,linux默认是跳过程序翻译过程的那四个阶段,所以需要单独的命令

gcc -E code.c -o code,i

后面的那个i是俗称的字符后缀

-E的意思是:从现在开始程序翻译,做完对源文件的预处理,就停下来

这是咱们写好的代码

要是有语法错误,就会这样告诉我们

这是正确运行的结果,最后的code.i表示的是,把这些内容输出到这个文件里面

接下来我们打开它

接下来我们分析那四条

我们可以很清楚的看到头文件被打开了

注释也没有了

宏也被替换了

至于条件编译:,就相当于把代码做出了一个裁剪,

2.2.2编译

命令是

gcc -s code.c -o code.s

后缀是,s

这一步是将代码进行编译,形成汇编语言

此时我们已经看不懂了,但是计算机可以看懂

2.2.3.-c

转成二进制模式

可重定向为目标二进制文件、

gcc -c code.c -o code.o

这个后缀是.o

2.2.4.最后一步就是生成可执行文件

gcc code.c -o code.exe

我们一直说的-o是输出到指定文件里面

这就是运行后的结果

3.为什么要把C语言翻译为汇编语言

这涉及到了悠久的历史,此处不再过多赘述

4.该如何理解库

库分为动态库和静态库

动态库链接:使用过链接动态库地址来进行的

动态库;一旦动态库缺失,相关的所有程序,都无法运行

静态库链接:把库中我们需要的直接拷贝到你的代码当中

静态库:一旦成功链接,就不需要静态库

动态 静态

.so .a

动态链接 静态链接

节省内存 不用跳转,不依赖库

慢,编译完成后依旧需要库 体积较大

我们学习的gcc默认采用动态的连接方式

注意:编译程序动态更好

如图,这个文件会非常的大

相关推荐
爱和冰阔落4 小时前
【Linux网络】TCP 半包粘包怎么解决?从长度报头、JSON 拆包到网络计算器完整实战
linux·运维·网络·tcp/ip
say_fall6 小时前
【Linux网络编程】UDP套接字编程:系统编程组件、基础回显服务、InetAddr与地址转换、翻译服务与线程池聊天室
linux·服务器·网络·udp·vr
ö Constancy6 小时前
一台电脑的硬件组成与作用:按功能分类详解(Windows 与 Linux 视角)
linux·windows·电脑
江湖有缘6 小时前
基于Ubuntu部署SoduWork:企业级 AI 原生协同平台实战全流程
linux·人工智能·ubuntu·ai·soduwork
无奈笑天下15 小时前
银河麒麟上nproc命令教程详解
linux·运维·服务器
Rabitebla18 小时前
【Linux】进程控制(十二) 自定义 Shell(二):内建命令与进程工作目录管理
linux·c++·笔记·学习·bash
坤坤子吖1 天前
Linux网络编程:TCP 粘包与半包问题,如何正确处理 TCP 流式数据?
linux·服务器·网络·笔记·网络协议·学习
AI_Gump1 天前
Harness篇|DeepSeek Harness 上手机:五条安卓移植路线与 App 内 Linux 拆解
android·linux·人工智能·智能手机·deepseek
星恒随风1 天前
MySQL 从零入门(六):复合查询详解——多表查询、自连接、子查询与 UNION
linux·服务器·数据库·mysql
少司府1 天前
嵌入式入门篇(二):初识STM32F103ZET6
linux·python·stm32·单片机·嵌入式硬件·mcu·嵌入式软件