怎样做自己的个人网站,wordpress seo 标题,佛山seo优化排名,怎么用dw制作个人主页目录
什么是gcc、g
gcc、g 相关操作详解
预处理、编译、汇编、链接来源
动静态链接是什么
结语 什么是gcc、g
gcc、g其实就是编译器#xff0c;是帮助我们从.c或者.cc#xff0c;.cpp文件编译成可执行程序的
其中#xff0c;我们如果要编译c语言文件的话#xff0c;…
目录
什么是gcc、g
gcc、g 相关操作详解
预处理、编译、汇编、链接来源
动静态链接是什么
结语 什么是gcc、g
gcc、g其实就是编译器是帮助我们从.c或者.cc.cpp文件编译成可执行程序的
其中我们如果要编译c语言文件的话上面两个我们都可以使用虽然g是用来编译cpp的但是cpp本身就包含了c语言
但是我们并不能使用gcc来编译cpp文件会报错的
接着我们来快速见一下gcc、g的用法其实这两个用法是差不多的所以接下来主包就只展示gcc的用法
这上面我们用到了一个 -o 的选项这其实就是在给生成出来的可执行程序进行一个命名
如果我们不加上 -o 选项的话那么他会默认将名字改成a.out gcc、g 相关操作详解
这里要声明一下由于gcc、g底层用的是同样的东西只不过默认处理的语言不同仅此而已所以我们gcc进行的操作g同样也有也可以进行
所以下面主包也同样是用gcc进行演示 首先我们的程序要从.c文件变成可执行程序一共需要经历四步
预处理、编译、汇编、链接
对应在gcc中的操作是 预处理gcc -E test.c -o test.i 编译gcc -S test.i -o test.s 汇编gcc -c test.s -o test.o 链接gcc test.o -o test 其实挺好记的选项就是ESc其实就看向键盘最左上角有一个Esc退出键
而对应后缀就是iso记着就好了
接着我们来详细谈一谈这四个步骤以及为什么是四个步骤而不是一步到位 预处理 其实这个步骤就干几件事情宏替换去注释头文件展开条件编译等等 我们可以简单来看一看 我们可以看到左边是test.c右边是.i而我们左边就12行到了右边就变成了800多行了其实在预处理这一步就是将上面的头文件展开注释去掉等等而已 但还有一个什么是条件编译 其实就和名字一样根据不同的条件编译不同的代码 就是这样的 编译 编译其实就干一件事情将C语言转变成汇编代码 而我们上面预处理那一步其实还是c语言只不过变得非常干净而已 但是这一步却是将c变成汇编如下图 我们用vim打开来看看这个.s文件 汇编 这一步传自上一步编译这一步就是将汇编翻译成二进制 这里就不用vim打开来看了因为二进制要看的话只会看到乱码 链接 到了最后一步链接这里其实就是将.o文件在Windows下可能叫做.obj变成可执行程序 预处理、编译、汇编、链接来源
可能有人会疑惑你说预处理我能理解这样看起来还是比较整洁替换一下我觉得没有问题
但是剩下三步是为什么为什么不能一步到位直接形成可执行程序
这里我们就需要讲一讲历史渊源了
在最开始的时候电脑刚出来的时候我们是用二进制进行编程的 就是像这样的
但是由于这样子太麻烦了所以就出现了汇编语言
但是我们汇编的底层还是二进制
接着就是c语言的出现
我们当然可以直接从c变成可执行但是这样太麻烦因为最底层还是二进制但是如果我们只是将出c变成汇编的话汇编到二进制那一步我们就不需要做了因为历史帮我们完成了所以效率就很高
所以有四步一方面是历史原因另一方面就是效率高了
另外还有一个有意思可以拓展一下的就是编译器的自举
问一个问题是有汇编语言还是先有汇编语言的编译器
答案当然是现有汇编语言不然的话汇编对应的编译器的语法检查等等东西怎么写
但是在最开始的时候我们只有语言没有对应的编译器所以我们就会先用二进制写一个匹配汇编的编译器接着就是我们再用这个二进制写成的汇编编译器再写一个用汇编语言写出来的汇编编译器
这时我们的编译器就出来了c语言同样如此这就叫做编译器的自举 动静态链接是什么 首先是操作动态链接的话是默认的你用gcc默认就是动态链接 如果你要静态链接的话需要在gcc指令的最后面加上-static 但是可能会遇到如下这种情况 这代表静态库没有安装因为可能有些默认就是没有静态库的用yum安装即可 然后要安装哪一个库就搜一下对应指令即可因为一般用不到这个所以其实不太需要安装 接着我们需要知道我们的项目中会包含很多头文件但是我们在编译的时候会先通过预处理找到库然后将库展开代替到项目中的
这就说明我们的云服务器中系统中是一定有对应的库的这样我们才能说去找到他
而在Linux中我们可以用 ldd 命令来查看 我们可以看到这里面用到的就是c语言的标准库
同时我们还可以用file指令看看具体的链接方式
这里可以看到就是动态链接
但是我们还需要知道什么是动静态链接 举个例子学校外面有一个网吧当到了周末的时候同学们都会去到网吧里面用电脑因为学校没有假设这时候我们的网吧就是动态库而同学们去网吧的这个过程就叫做动态链接 而静态链接就是没有网吧但是在学生宿舍里面每一个人都有一台电脑这时候不管外面有没有网吧同学们都不会出去了因为电脑直接就有了这就是静态链接 而在我们的Linux中最主要的就是动态链接因为动态链接的优点就是我们的库网吧只需要有一个就够了会省空间提高效率但是缺点就是当我们的这个对应的库被误删的时候可能会有几百上千个文件同学同时用不了上不了网
而静态库的优缺点则是相对的因为这是直接将库给每个人配一个了 这是动静态库大小的对比 我们可以看到的是这里面都是用到的动态库因为本身静态库的效率就不高从这里我们就可以看到Linux对于动静态库的态度了 结语
这篇文章到这里就结束啦~(▽)~*
如果觉得对你有帮助的可以多多关注一下喔