静态链接与动态链接

来源:互联网 发布:无锡乐知英语 编辑:程序博客网 时间:2024/05/16 03:28

      静态链接是由连接器在链接时将库的内容加入到可执行程序中的做法,全部内容都放到同一个可执行文件中。

      静态链接使得不同的程序开发者和部门能够相对独立地开发和测试自己的程序模块,从某种意义上来讲大大促进了程序的开发效率,原先限制程序的规模也随之扩大。但是慢慢地静态链接的诸多缺点也逐步暴露出来,比如浪费内存和磁盘空间、模块更新困难等问题

      静态链接的最大缺点是生成的可执行文件太大,需要更多的系统资源,在装入内存时也会消耗更多的时间。

 

      动态链接不是并不在执行前将整个程序生成一个可执行文件

      在可执行文件装载时或运行时,由操作系统的装载程序加载库。大多数操作系统将解析外部引用(比如库)作为加载过程的一部分。在这些系统上,可执行文件包含一个叫做import directory的表,该表的每一项包含一个库的名字。根据表中记录的名字,装载程序在硬盘上搜索需要的库,然后将其加载到内存中预先不确定的位置,之后根据加载库后确定的库的地址更新可执行程序。可执行程序根据更新后的库信息调用库中的函数或引用库中的数据

      可以动态链接的库,在Windows上是dynamic link library (DLL),在UNIX或Linux上是Shared Library。库文件是预先编译链接好的可执行文件,存储在计算机的硬盘上。大多数情况下,同一时间多个应用可以使用一个库的同一份拷贝,操作系统不需要加载这个库的多个实例

   

 

 

windows下 静态链接库的使用方法(注意引用静态链接库的语句时  programs comment(lib,"静态库的名字"))

 
静态链接是指将一个或多个静态链接库(.lib文件)在Link时期和调用该库的程序一起形成exe文件。网上关于静态链接库的理论叙述多且详尽,我就不再造轮子了,此处仅说明一下具体的使用方法。
创建一个lib的过程很简单,如:
Windows下静态链接库的使用
Windows下静态链接库的使用
在项目中添加Func.h和Func.cpp文件:
Windows下静态链接库的使用
Windows下静态链接库的使用

其中分别是示例函数add的声明和实现。
编译之后,得到
Windows下静态链接库的使用
接下来就是如何使用这个静态链接库了。
新建一个控制台程序UseLibTest,如下:
Windows下静态链接库的使用

使用静态链接库需要两个条件:
1)拥有静态库对应的头文件,此处为Func.h;
2)导入Lib文件,此处为MyLibTest.lib;
将Func.h和MyLibTest.lib放入到UseLibTest的源代码所在目录下(P.S:对win32工作目录没啥了解,尝试过把Lib文件放到Debug文件夹里,编译器表示找不到,放到源代码目录下却神奇地可以找到),并在源代码中添加这样一行代码:
Windows下静态链接库的使用
这是一条预编译指令,从这条指令上也可看出,静态链接库中的代码在编译时是和主程序一起编译的。
编译UseLibTest并运行,结果如下:
Windows下静态链接库的使用
静态链接库使用成功!Windows下静态链接库的使用

注意静态链接库中不能再包含其他的动态链接库或者静态库 ,而在动态链接库中还可以再包含