您的位置:首页 > 其它

静态库与动态库的理解

2014-11-05 18:35 162 查看
在编写程序的时候经常会看到两种类型的文件,其后缀名分别是.lib与.dll,我以前一直就将其分别理解为静态库文件与动态库文件,其实不然,动态库与静态库文件并不是只是拥有这些后缀名即可辨别,下面我介绍一下我对两种库文件的理解。

首先,确实是有两种库文件:静态库文件、动态库文件

1、静态库文件(static link library)

静态库文件的内容即为函数代码本身,在编译时直接将代码添加到程序中去。一个静态库文件实际上是若干个目标文件的集合,目标文件也是cpp文件编译生成的。在程序进入链接阶段时,链接器从静态链接库中得到被引用到的函数,并且将库文件同程序代码一同放到可执行文件中。

在vc中创建静态库文件的方法

首先创建一个static library型工程,然后编写cpp文件,其中可能包含头文件,然后对cpp文件进行编译,即得到一个静态库文件。在debug的目录下即可找到。以后编写其它的程序即可使用到这里建立的静态库文件。

使用静态lib的方法

1)在project——>link——>Object/Library Module中加入生成的lib文件(这里的顺序是先查询工程目录,再查询系统lib目录);或者可以在源代码中加入指定#pragma comment(lib, "*.lib")(*。lib即为你创建的lib文件)。

2)将lib文件拷贝到工程所在的目录,或者执行文件生成的目录,或者系统的Lib目录中。

2、动态库文件(dynamic link library)

动态库文件只是后缀名为dll的文件么?不然。就如同函数的声明与定义一样,动态库文件包括两个部分,第一部分是函数的执行代码;第二部分是包含函数所在DLL文件以及此函数在此DLL文件中的入口地址。第一部分是一个.lib的文件。这个lib文件与静态库文件是不同的。这里的lib文件并不是由cpp文件编译后的若干个目标文件组成,它只是提供动态链接到DLL文件所需要的信息,就像一张注册表。这种lib文件可以在编译一个DLL工程时由编译器生成。因此,动态链接的过程即为,lib文件与程序代码一同编译链接,在执行的时候,根据lib编译链接后的地址信息去DLL文件中获取所引用的函数,因此lib文件与dll文件必须同时发布,否则仅仅可以通过编译链接,但是在执行时会发生错误。

在vc中创建动态库文件的方法

首先创建一个dynamic link library型工程,然后编写cpp文件,对cpp文件进行编译build,然后即可在debug目录中找到生成的lib和dll文件。

使用动态lib的方法

1)隐式链接

通过project——>link——>Object/Library Module中加入lib文件(或者在源代码中插入指令,如上),并将dll文件拷贝到工程所在目录。

2)显示连接(这里以后补充,暂时请先看http://www.cppblog.com/amazon/archive/2009/09/04/95318.html)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: