武进网站建设代理商,google官网下载,seo专员是干嘛的,四川建设厅电话网站目录
gcc的翻译#xff08;编译#xff09;过程#xff1a;
预处理#xff1a; 条件编译#xff1a;
编译#xff1a;
汇编链接#xff1a;
什么是链接#xff1f;
安装静态库#xff1a;
静态库的使用#xff1a;
动态静态的对比#xff1a;
优缺对比… 目录
gcc的翻译编译过程
预处理 条件编译
编译
汇编链接
什么是链接
安装静态库
静态库的使用
动态静态的对比
优缺对比 gcc 是一个将C语言文件变成可执行文件的工具。
在Linux中如果需要将一个C语言文件变得可以执行那么除了这个文件本身的内容是C语言编写的内容外还需要gcc这个编译工具进行编译才行。
gcc 使用的格式方法:gcc 要编译的文件 //在该代码下gcc默认会将编译后的可执行文件改名为 a.out //但是这种编译方式是最新版本的老版本可能不支持所以在编译的过程中需要一点改变gcc 需要编译的文件 -stdc99//而若想要换一个名字使得编译出的文件不在是a.out 则需要使用以下代码gcc 需要编译的文件 -o 新名字 -stdc99 //或是gcc -o 新名字 需要编译的文件 -stdc99 默认用法 改名用法
另外用于编译c的g命令也可以编译C语言且g编译c的方法和gcc编译C语言的方法大致相同但不同的是gcc并不能编译c
gcc的翻译编译过程
gcc的翻译过程总共可以分为四步分别是预处理、编译、汇编、链接。 预处理
以 test.c文件为例进行预处理需要注意的test.i是自己定义的文件名字而且.i一般是预处理文件的后缀
gcc -E tset.c -o test.i//-E的含义是从现在开始进行程序的翻译预处理完成就停下 如图所示左边是原本的文件内容而右边是经过预处理后的文件可以注释的消失以及有着八百多行的代码除去主函数另外八百多行代码其实是头文件的展开部分预处理过程中会将头文件进行展开然后挑选出合适的粘贴在文件代码上方。 条件编译
而预处理也可以执行条件的编译在文件代码中设置了条件限制而我们需要调用条件来进行摘取代码内容时通常使用的代码是 gcc -D执行的条件 需要裁剪的文件
但是我们可以在文件中设置条件直接使用预处理的方法就可以进行条件的裁剪了 裁剪前 预处理裁剪后
编译
当然编译的时也可以直接从.c文件从头开始或者如下代码一样从预处理的文件开始
gcc -S tset.i -o test.s//-S 的意思就是从现在开始进行程序的编译编译完成就停下来 编译后的代码
汇编链接
汇编
gcc -c test.s -o test.o
从现在开始进行程序的汇编汇编完成就停下来而汇编之后的文件并不是最终的文件文件若是要正常的执行则需要两个条件
本身就是可以执行的文件文件的内容必须是可执行的
上文讲诉过汇编之后的文件是二进制的目标文件而二进制的目标文件本身就是不可以被执行的文件所以需要将这个文件进一步的转化也就说最后一步链接
链接
gcc test.o -o my.exe
所以连接是最重要的而链接又是什么呢
什么是链接
链接是库和程序的结合当一个语言被发明的时候是有一套标准的而这个库也就表示着语言的标准库。 使用ldd命令查看文件所用的库
当然库也分类在Linux中分为两种第一种是动态库通常以.so为后缀且链接一般默认使用的库就是动态库而另一种是静态库是以.a为后缀的并且在Linux中默认是没有静态库的存在所以需要自己安装。
安装静态库
sudo yum install -y glibc-static libstdc-static
静态库的使用
gcc -o 指定名字 链接的文件 -static
动态静态的对比 占用空间大小的对比前者是动态后者是静态 库的链接对比前者是动态后者是静态 优缺对比 C动态库默认提供的gcc默认形成的可执行程序默认采用动态链接 动态库动态链接的优缺点 不能丢失节省资源 静态库静态链接的优缺点 一旦形成和库无关浪费资源