参阅文档资料:
关于linux下的库文件_libmagic.so-CSDN博客
头文件和库之间的差异|极客教程 (geek-docs.com)
参阅视频资料:动态库与静态库讲解_哔哩哔哩_bilibili
一.头文件
1.意义与运用
1.英文解说与界说
Head File头文件,详细界说为:包括一切"即将在主代码文件中"运用的"头文件称号的文件"被称为头文件
拆分概念:什么是”即将在主代码文件中运用”?
答:比方你要运用吹风机,你需求先接通电源,再敞开吹风机,那么接通电源是一个函数,敞开吹风机是一个函数,这两个函数一同能够完成”你运用吹风机”这个目的。而在实际的编程环境中,你要编写以便完成某种功用的相关函数的”姓名”(专业一点叫做函数头)会放在头文件中,当然,你不止要运用一个”姓名”,这样的一个”姓名”集合全都被放在了头文件里。
2.文件类型
拓宽名一般为”.h
“
3.怎么运用
①一般由程序员自行创立
②预处理器指令#include将会加载头文件,格局为#include <.h>或者#include “.h”,详细格局还要依据言语类型决议,以及预处理器指令自身的称号也依据不同言语而不同。
尖括号<>和双引号"代表不同头文件常用的加载方式
<>常用来加载系统头文件(即编译器自带的头文件),一般以特定方式进行查找(依据操作系统和编译软件不同而不同),双引号"常用来加载用户头文件,先在当时目录下查找,再以<>的特定方式查找
2.头文件的功用
提供特定的API及其功用,头文件负责指导编译器怎么调用这些功用,以便在主文件中运用
主文件也便是自己的项目文件,能够是C言语、C 、Python等言语编写的文件
同义了解:声明和界说一些外部函数和变量。
解说:
“外部”与”内部”是针对文件规模界说的,仅能在文件内部运用的函数叫做内部函数,相反,外部函数能够在文件与文件之间被调用。很显然,内部函数的数量远远不如外部函数(多为程序员自行界说的,依据实际生发生活需求的)。
知识弥补:从C源文件到可执行文件的过程(源程序为hello.c--文本)
--预处理及宏界说区域(在main函数前)
#include<stdio.h> //引入了"stdio.h"这个头文件
--main函数体(主程序的唯一入口)
int main(){
printf("HelloWorld!n");
return 0;
}
—过程1预处理Preprocessor:常见的文件后缀”.cpp”其实便是预处理器文件(C Preprocessor)。
预处理器执行宏替换、条件编译以及包括指定的文件,然后生成一个”中间C文件”即hello.i文件。
–过程2编译Compile:编译器cc1(gcc的编译组件),把高档言语变成汇编言语,生成hello.s文件。
–过程3汇编:将汇编言语变成二进制机器言语,生成hello.o文件(只编译不链接)。
–过程4链接:将二进制机器言语变成可执行程序hello(a.out可执行方针文件),输入./hello即可输出”HelloWorld!”
3.头文件的特色
头文件只要头称号(多个函数的函数名),它只包括函数声明而非包括函数的详细功用完成(即写详细代码完成功用)。
知识弥补:C言语中的函数结构
–注:其他言语的结构大体相似,需求详细查找相关资料对应区分即可。
二.库文件
1.意义与运用
1.意义
包括一个函数主体的文件被称为库,库中包括了头文件中函数的详细完成以及与动态库的衔接。
2.怎么运用库文件
1.包括库的头文件 –include
2.运用库中的函数和变量
3.将库文件衔接到程序中。–在”衔接”这一步完成
2.文件类型
“.lib”文件和”.dll”文件,分为静态库文件和动态库文件。
静态库.lib文件
意义”library图书馆”,标志着图书馆的书往往被人借阅与检查,每本书属于一块儿内存空间,因而借出去的书所占用的空间是累加的联系。
每引证一份lib文件,就会发生一份相应的空间,相同的lib文件会导致内存空间的冗余。
注:图片原创,转载运用请声明出处
动态库.dll文件
和动态库lib文件
意义”dynamic link library动态链接图书馆”,标志着图书馆的一本书被人借阅时,倘若此时有别人也要来借阅,则两个人一同看同一本书,极大地节省了内存空间。而有这样的同享书,也需求索引来便于用户去查找,因而dll文件对应的lib文件便是为了完成这样的功用而存在,告知用户你的书在哪个方位(但仅仅只是告知–索引功用),也可称之为”动态库的导入库import library”,即引入库。
两者效果的阶段
.h头文件是编译时必须的,lib是链接时需求的,dll是运转时需求的。
3.库文件的特色
①自身是二进制代码
②作为商用,用户无法看到库文件的对应源文件,能够最大地保护好源文件代码的隐私性。
③在”衔接”环节中调用静态和动态库文件。
4.动态库文件和静态库文件的差异
①在过程上的差异
静态衔接库便是把(lib)文件中用到的函数代码直接链接进方针程序,程序运转的时分不再需求其它的库文件。
动态链接便是把调用的 函数所在文件模块(DLL) 和调用函数在文件中的方位等信息链接进方针程序,程序运转的时分再从DLL中寻觅相应函数代码,因而需求相应DLL文件的支撑。
②在内存占用上的差异
静态链接库与动态链接库都是同享代码的方式。
如果采用静态链接库,则不管你愿不愿意,lib 中的指令都悉数被直接包括在终究生成的 EXE 文件中了。
可是若运用 DLL,该 DLL 不必被包括在终究EXE文件中,EXE 文件执行时能够“动态”地引证和卸载这个与 EXE 独立的 DLL 文件。
静态链接库和动态链接库的别的一个差异在于静态链接库中不能再包括其他的动态链接库或者静态库,而在动态链接库中还能够再包括其他的动态或静态链接库。