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的编辑器,进行了详细,以及原理的介绍,还讲了动静态库的东西,还有自动化构建工具,希望下来大家自己多多运用,才能掌握,大家一起加油!!!

相关内容

热门资讯

新长沙作文 新长沙作文新 长 沙今天,爸爸妈妈说明天带我出去玩,我高兴得一蹦三尺高,可是又想了想,到底是到哪里去...
心灵深处的快乐作文400字 心灵深处的快乐作文400字(精选35篇)  快乐是人类精神上的一种愉悦,是一种心灵上的满足,是从内心...
吹泡泡作文200字 吹泡泡作文200字(精选117篇)  在现实生活或工作学习中,大家都写过作文吧,写作文可以锻炼我们的...
雨点,思念你 -雨作文 雨点,思念你 -雨作文突然记起了幼时婆婆家养的.一条狗,好乖好乖,每当旁边没人的时候,我就喜欢抱着它...
文具“哭”了优秀作文 文具“哭”了优秀作文  在平时的学习、工作或生活中,大家都不可避免地会接触到作文吧,作文是人们以书面...
一件有趣的事优秀作文500字 一件有趣的事优秀作文500字(通用25篇)  在日常学习、工作抑或是生活中,说到作文,大家肯定都不陌...
鲸鱼的自述作文450字 鲸鱼的自述作文450字  大家好,我是蓝鲸,我可是世界上现今发现的最大动物呢!你可别看我的名字中带有...
去上海作文200字 去上海作文200字 昨天,我们一大家子去了上海,那边可好玩了!我们去了上海水族馆,还去了著名的东方明...
最美乡村作文300字 最美乡村作文300字五篇  在日常学习、工作抑或是生活中,许多人都写过作文吧,写作文是培养人们的观察...
老鹰捉小鸡作文200字 老鹰捉小鸡作文200字  大课间活动,老师让我们玩老鹰捉小鸡的.游戏。我当母鸡,林峰宇当老鹰,其他同...
凡事三思而后行议论文 凡事三思而后行议论文  在日常学习和工作中,大家都不可避免地要接触到论文吧,论文可以推广经验,交流认...
我的拿手菜作文 我的拿手菜作文500字(通用19篇)  无论是在学校还是在社会中,大家都写过作文,肯定对各类作文都很...
忆春作文600字 忆春作文600字  我的童年五彩缤纷,就像小河中的鹅卵石,五颜六色。他们带给我的开心快乐是无穷的,更...
梦想作文600字 梦想作文600字合集六篇  在学习、工作、生活中,大家总少不了接触作文吧,作文根据写作时限的不同可以...
历史的见证作文 历史的见证作文  在我们平凡的日常里,大家都不可避免地要接触到作文吧,通过作文可以把我们那些零零散散...
馋嘴的小猫作文 馋嘴的小猫作文馋嘴的小猫一天中午,一只小猫在玩游戏。玩着玩着,小猫突然觉得自己肚子很饿,就像中午没有...
我的家乡河南作文 【精】我的家乡河南作文  在生活、工作和学习中,大家都写过作文,肯定对各类作文都很熟悉吧,写作文是培...
我的未来我做主作文 我的未来我做主作文自己的路自己走。所以说,最重要的,是清楚自己要什么。如果连追求理想的勇气都没有,还...
安全教育作文 安全教育作文安全教育作文生命.代价——交通安全征文1引子:人的生命只有一次,所以我们必须珍惜它,必须...
滋味作文500字 滋味作文500字(通用21篇)  在日常的学习、工作、生活中,大家都不可避免地要接触到作文吧,写作文...