【1】在开始正文之前我们先来了解一下程序的编译过程:
源文件(.h/.cpp等)通过预编译---编译----汇编----链接---之后生成可执行的二进制文件
静态链接库(.lib/.a)和动态链接库(.dll/.so)的调用都是在程序中包含相应的include头文件里
【2】什么是动态链接库?什么是静态链接库?
静态链接库:其实是一个外部。静态库的文件内容通常包含一堆自定义的变量与函数,其内容不像动态链接库那么复杂,在编译期间由编译器与连接器将它集成至应用程序内,并合并成目标文件以及可以独立运作的可执行文件
动态链接库:是一种不可执行(没有程序的启动入口)的二进制程序文件,它允许程序共享执行特殊任务所必须的代码和资源。DLL多数情况下是带有DLL扩展名的文件,但也可能是EXE或其他的扩展名,它们向运行于os下的程序提供代码,数据或者函数。
【3】静态链接库和动态链接库的区别?
区别来源:静态链接库,动态链接库的区别来自于链接阶段如何处理库,链接成可执行程序,分别称为静态链接库和动态链接库。
区别:
静态链接库:名字:一般是lib.xxx.a。在链接阶段,将源文件中用到的库函数与汇编生成的目标文件.o合并生成可执行文件。该可执行文件可能会比较大。缺点:文件太大(静态链接库在内存中存在多份拷贝会导致空间资源的浪费),如果静态库改变,程序必须重新编译。优点:分别程序的移植(因为可执行程序与库函数就再没有关系了,所以就不需要外部函数库的支持)
动态链接库:名字:一般是lib.xxx.so。在程序运行过程中动态的调用库文件,多个程序只用一个库,这个目标文件在内存中只存在一份,供所有程序使用。并且在程序运行过程中动态调用库文件,很方便,所占用的空间较静态链接库来说很小。缺点:动态链接库的可移植性差,比如如果不同电脑的运行环境或者说动态链接库所存的地方不同都可能导致程序运行出错。优点:方便,所占空间小。
1376

被折叠的 条评论
为什么被折叠?



