公司企业网站程序下载,wordpress数据清除,怎样学做网络推广,贵阳网站开发工程师招聘网目录
一、前言
二、gcc/g的使用
三、程序翻译的四个阶段
1.预处理
2.编译
3.汇编
4.链接
四、动静态库
1.库函数的命名和分类
2. 动静态库的区别 一、前言
学习了vim的使用方法后#xff0c;我们就可以高效编辑文本文件了#xff0c;但vim并不像vs一样编辑好.c文件…目录
一、前言
二、gcc/g的使用
三、程序翻译的四个阶段
1.预处理
2.编译
3.汇编
4.链接
四、动静态库
1.库函数的命名和分类
2. 动静态库的区别 一、前言
学习了vim的使用方法后我们就可以高效编辑文本文件了但vim并不像vs一样编辑好.c文件后就可以直接编译运行在Linux中运行代码需要使用工具:gcc/g
本文着重讲解gcc/g的使用和程序翻译需要进行的四个阶段预处理、编译、汇编、链接对应的指令和生成的文件最后讲解动静态库的区别和联系。 二、gcc/g的使用
在前面Linux的学习中我们认识到Linux不区别文件后缀例如写了.txt后缀能提醒用户这是个文本文件不写也不影响什么。
但Linux系统不区分文件后缀不代表Linux下的各种程序不区分今天学习的gcc和g就是Linux下的程序它们是要看文件后缀的 gcc是C语言编译器只能编译C语言程序也就是.c为后缀的文件g是C编译器C、C都可以编译 接下来介绍gcc/g的使用方法以编译code.c文件为例
指令 gcc code.c 默认生成名为a.out的可执行程序
指令 gcc code.c -o name 生成名为name的可执行程序
指令 gcc code.c -std99 使用c99标准来编译
当我们生成可执行程序后此文件通常是绿色的此时只需要./a.out即可运行代码 三、程序翻译的四个阶段
在学习C语言时就了解到程序翻译需要进行的四个阶段及过程如下图所示 1.预处理
在预处理阶段要做的工作有
头文件展开去掉注释条件编译宏替换
那么经过这个过程后还是C语言代码吗答案是肯定的该过程只是预处理了一下C语言代码把一些没必要的内容删除减少后续工作的工作量处理后仍然是C语言代码。
使用指令 gcc -E code.c -o test.i 就可以得到预处理后的.i为后缀的文件
打开code.c和code.i文件对比就能发现注释已经被去掉头文件也进行了展开。 另外还有一个注意的点gcc可以在命令行中定义宏例如指令gcc code.c -o code -D VERSION22就相当于在代码中添加一行#define VERSION2 2-D选项用于指定一个宏。 2.编译
编译阶段主要的工作是将C语言翻译为汇编代码需要通过-S选项生成.s为后缀的文件。
使用指令gcc -S code.c -o code.s 3.汇编
汇编阶段是把汇编语言变成二进制的过程这个过程生成.o为后缀的目标文件此时虽然已经是二进制文件了但还不是一个可执行文件获取该阶段的文件需要用到-c选项。
使用指令gcc -c code.c -o code.o 4.链接
链接阶段的大致流程是这样的 .o文件 系统库 可执行程序
在本篇文章的后半段讲完动静态库后详解链接过程。 四、动静态库
1.库函数的命名和分类
我们在写C语言代码时像printf这种函数并我们自己去实现然而在stdio.h的头文件中也仅仅只有printf函数的说明那么该函数的实现在哪里呢答案是在可执行程序依赖的第三方库里。
使用指令ldd 可执行程序名 可以查看该C语言程序所依赖的库是lib64路径下libc.so.6的库 对于库名字的解释 Linux下.so是动态库.a是静态库Windows下.ddl是动态库.lib是静态库 现在我们就能理解链接这个过程了就是将.o文件和动/静态库结合的过程。 2. 动静态库的区别
通俗的来讲动态库类似于网吧里的电脑而静态库就类似于自己家里的电脑。 它们的区别是 动态库是共享库通过函数地址来关联程序静态库是私有库可以独立运行 动态库是C/C或其他第三方提供的所有方法的集合被所有程序以动态链接的方式关联起来而静态库则是被所有程序以拷贝的形式将所有代码拷贝至自己的可执行程序中。
说白了静态库就是将所有的代码拷贝到程序中而动态库则是去寻找需要调用的函数的地址。 动态库的优点形成的可执行程序体积较小节省资源动态库的缺点要查找函数地址稍微慢一点并且有强依赖性丢失库程序将无法运行 静态库的优点无视库可以独立运行可移植性好静态库的缺点体积太大浪费资源