linux编辑器的使用(gcc,g++)
创始人
2024-05-19 10:56:30
0

前言

gcc/g++是一个编译器。

我们程序的翻译有四个步骤
1.预处理(头文件展开,条件编译,宏替换,去注释)
2.编译(c语言汇编语言)
3.汇编(汇编->可重定位目标二进制文件,不可以被执行的,bin.obj)----只是把我们自己的代码进行翻译形成二进制目标文件
4.链接(将我们这自己形成的.obj文件和库文件某种合并,形成可执行程序)

gccg++使用操作

我们怎么编译文件

我们在编译的时候,使用gcc +文件名,就会形成一个可执行程序->a.out在这里插入图片描述

如果我们想形成自己想要的名字的可执行程序,我们可以用-o选项,也就是gcc -o myfile myfile.cgcc myfile.c o myfile,两种都可以,主要是记住-o后面直接跟我们要的可执行程序的名字。
♥之后我们在使用中,一般使用这种操作来编译程序在这里插入图片描述

(1)预处理

预处理的作用
头文件展开,条件编译,宏替换,去注释.

我们先看一下我们的代码,然后进行预处理后,然后进行对比
下面是我们的代码.
在这里插入图片描述

怎么看到预处理的操作
gcc -E这个选项表示,从现在开始进行程序的翻译,预处理做完,就停下来。但是我们直接打印在屏幕上就太麻烦了,我们将它形成一个文件,就在使用-o选项,所以最后的操作就是gcc -E myfile.c -o myfile.i,就可以形成一个myfile.i的文件,因为一般进行完预处理之后的文件就是用.i进行后缀。在这里插入图片描述

<1>头文件的展开

我们发现这个代码多出来800多行的代码,这个东西就是我们的头文件展开的内容,然后将内容复制到预处理的文件中。
所以这一步叫做头文件的展开
在这里插入图片描述

<2>去注释

我们发现注释没有了,这一步的操作就是去注释。在这里插入图片描述

<3>条件编译

我们上面定义过PRINT,所以我们发现下面的就是剩下了hello PRINT,没有None,所以这一步就是条件编译在这里插入图片描述

<4>宏定义

因为上面定义M是100,所以我们在进行预处理操作的时候,直接将M换成100,这个操作就是宏定义
在这里插入图片描述

(2)编译

编译的作用
c语言汇编语言
操作
-S:从现在开始进行程序的翻译,当编译做完,就停下来。
gcc -S myfile.i -o myfile.s,默认形成myfile.s的文件。
在这里插入图片描述

(3)汇编

汇编的作用
汇编->可重定位目标二进制文件,不可以被执行的,bin.obj)----只是把我们自己的代码进行翻译形成二进制目标文件

只是把我们自己的代码进行翻译形成二进制文件目标,就是形成.obj文件
操作:gcc -c myfile.s -o myfile.o,默认形成.o文件。

打开文件,就是一堆乱码。
-c,从现在开始进行程序的翻译,当汇编做完,就停下来。在这里插入图片描述

(4)链接

链接的作用
将我们这自己形成的.obj文件和库文件某种合并,形成可执行程序

可以直接进行链接,看下面操作
gcc myfile.o -o myfile,就形成了可执行程序myfile

快速记忆

我们的选项合起来就是ESc,就是前三个操作的选项,我们只需要记住,前两个字母是大写就可以了。

我们三个操作形成的文件后缀是 ,.iso。一些镜像文件就是iso,我们不是ios,记住千万不要记混。

谈谈链接

新命令
ldd+可执行程序,检测这个可执行程序在当前被形成的时候,都依赖那些库
在这里插入图片描述
我们为什们能够在我们linux下,进行c的编写呢?
linux系统默认携带了语言级别的头文件语言对应的库

动静态库

库分两种-----库本质就是文件
1.静态库:libXXXXX.a(专门让编译器,对用户的程序进行静态链接的)
2.动态库:lib.XXXX.so(专门让编译器,对用户的册程序进行动态链接的)
文件的名字怎么看呢?
前缀lib XXXX后缀.a我们去掉前缀,去掉后缀,剩下的就是我们的名字。
静态库和静态链接
链接的时候,如果是静态链接,找到静态库,拷贝静态库中的我们所需要的代码到我自己的可执行程序中。
静态链接成功:我们的程序,不依赖任何库,自己就可以独自运行
静态库的缺点
因为自身拷贝的问题,比较浪费空间
动态库和动态链接
链接的时候,如果是动态链接,找到动态库,拷贝动态库中的我们所需要的代码的地址到我自己的可执行程序中。
动态链接成功:我们的程序,还是依赖库,一但动态库缺失,我们的程序就无法运行。
静态库的优点
因为可以做到可以被大家共享,所以真正的实现永远都是在库中,程序内部只有地址,比较节省空间。
静态库 VS 动态库
linux默认使用的是动态库和动态链接。

做做实验

动态链接
在这里插入图片描述

静态链接,我们先用这个命令创建静态链接gcc myfile.c -o myfile-static -static 在这里插入图片描述

我们发现他的体积相差40倍作用,我们就将动静态库的内容讲解的差不多了。

linux自动化构建工具(make/Makefile)

make:是一个命令
makefile:是一个文件,这个文件在当前的源代码路径下。

怎么自动化编译代码
1.快速写一个demo
2.规则

(1)快速写一个demo<见见猪跑>

先创建一个Makefile文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

(2)细节

makefile是一个围绕依赖关系和依赖方法构建的一个自动化编译关系
完成一件事情,必须要有正确的依赖关系和依赖方法

我们上面makefile的内容如下图
在这里插入图片描述

依赖关系
myfile:myfile.c这个就是依赖关系,根据myfile.c依赖文件 ,形成myfile目标文件。形成myfile依赖于myfile.c
依赖方法
`gcc -o myfile myfile.c,根据这个依赖方法,形成目标文件。
注意
1.目标文件对应的依赖文件列表可以是空
2.makefile 在进行从上到下的扫描的,只会进行最开始的目标文件。第二个或者之后的并不会直接实现的
.PHONY作用
总是被执行的。
被它修饰的东西就叫做伪目标
所以我们可以发现,在上面这个makefile,我们的clean被他修饰,所以我们的clean可以一直执行,但是在我们形成目标文件,没有被他修饰,在执行完一次后,目标文件是最新的,我们就不能在进行执行了。如果进行修改,就还可以在执行。
我们知道了上面的知识,我提一个问题,系统怎么知道我们形成目标文件是最新的?
就是看时间,系统会比较源代码的时间和可执行程序的时间。
如果正常的话,我们的可执行程序的时间是比源代码的时间快,所以我们就不能执行了。
但是如果我们修改了,我们就又可以执行了
在这里插入图片描述

总结

我们本文将linux的编辑器,进行了详细,以及原理的介绍,还讲了动静态库的东西,还有自动化构建工具,希望下来大家自己多多运用,才能掌握,大家一起加油!!!

相关内容

热门资讯

常用商务英语口语   商务英语是以适应职场生活的语言要求为目的,内容涉及到商务活动的方方面面。下面是小编收集的常用商务...
六年级上册英语第一单元练习题   一、根据要求写单词。  1.dry(反义词)__________________  2.writ...
复活节英文怎么说 复活节英文怎么说?复活节的英语翻译是什么?复活节:Easter;"Easter,anniversar...
2008年北京奥运会主题曲 2008年北京奥运会(第29届夏季奥林匹克运动会),2008年8月8日到2008年8月24日在中华人...
英语道歉信 英语道歉信15篇  在日常生活中,道歉信的使用频率越来越高,通过道歉信,我们可以更好地解释事情发生的...
六年级英语专题训练(连词成句... 六年级英语专题训练(连词成句30题)  1. have,playhouse,many,I,toy,i...
上班迟到情况说明英语   每个人都或多或少的迟到过那么几次,因为各种原因,可能生病,可能因为交通堵车,可能是因为天气冷,有...
小学英语教学论文 小学英语教学论文范文  引导语:英语教育一直都是每个家长所器重的,那么有关小学英语教学论文要怎么写呢...
英语口语学习必看的方法技巧 英语口语学习必看的方法技巧如何才能说流利的英语? 说外语时,我们主要应做到四件事:理解、回答、提问、...
四级英语作文选:Birth ... 四级英语作文范文选:Birth controlSince the Chinese Governmen...
金融专业英语面试自我介绍 金融专业英语面试自我介绍3篇  金融专业的学生面试时,面试官要求用英语做自我介绍该怎么说。下面是小编...
我的李老师走了四年级英语日记... 我的李老师走了四年级英语日记带翻译  我上了五个学期的小学却换了六任老师,李老师是带我们班最长的语文...
小学三年级英语日记带翻译捡玉... 小学三年级英语日记带翻译捡玉米  今天,我和妈妈去外婆家,外婆家有刚剥的`玉米棒上带有玉米籽,好大的...
七年级英语优秀教学设计 七年级英语优秀教学设计  作为一位兢兢业业的人民教师,常常要写一份优秀的教学设计,教学设计是把教学原...
我的英语老师作文 我的英语老师作文(通用21篇)  在日常生活或是工作学习中,大家都有写作文的经历,对作文很是熟悉吧,...
英语老师教学经验总结 英语老师教学经验总结(通用19篇)  总结是指社会团体、企业单位和个人对某一阶段的学习、工作或其完成...
初一英语暑假作业答案 初一英语暑假作业答案  英语练习一(基础训练)第一题1.D2.H3.E4.F5.I6.A7.J8.C...
大学生的英语演讲稿 大学生的英语演讲稿范文(精选10篇)  使用正确的写作思路书写演讲稿会更加事半功倍。在现实社会中,越...
VOA美国之音英语学习网址 VOA美国之音英语学习推荐网址 美国之音网站已经成为语言学习最重要的资源站点,在互联网上还有若干网站...
商务英语期末试卷 Part I Term Translation (20%)Section A: Translate ...