lib和dll的区别与使用

抛出几个概念:库,静态库,动态库,链接,静态链接,动态链接,显示链接,隐式链接。若不明白,请继续往下看。

什么是库?

:库是写好的现有的、成熟的、可以复用的代码。库和可执行文件的区别是:库不是独立程序,它是向其他程序提供服务的代码。

有哪些库?

有两种库:静态库(.a、.lib)和动态库(.so、.dll),它们是两种共享程序代码的方式。

静态库(Static library/Static link library):lib包含代码本身,在编译时直接将代码加入到程序当中。在可执行文件中包含了库代码的一份完整拷贝。vs编译成功后,只会生成一个.lib文件。

动态库(Dynamic library/Dynamic link library):lib包含了函数所在的dll和dll中函数位置的入口信息。代码由运行时加载在进程空间中的dll提供。vs编译成功后,会生成两个文件.lib文件和.dll文件。

静态库和动态库中的lib有什么区别?

静态库中的lib:包含函数代码本身(包括函数的索引和实现),在编译时直接将代码加入程序当中。

动态库中的lib:包含函数所在的dll文件和文件中函数位置的索引,函数实现的代码由运行时加载到进程空间中的dll提供。

所以:lib是编译时用到的,dll是运行时用到的。如果要完成代码的编译,只需要lib,如果要使动态链接的程序运行起来,只需要dll。

如何使用静态库和动态库呢?

使用静态库:需要.h文件、.lib文件

1.Property->Linker->Input->Additional Dependencies中添加.lib文件,或者在源代码中加入指令#pragma comment(lib,"XX.lib")

2. Property->Linker->Input->Additional Library Directories中配置.lib文件所在的相对路径

3. 将.dll文件置入工程所在目录,然后添加对应的.h头文件

链接:链接器将一个个目标文件(或许还有若干程序库)链接在一起生成一个完整的可执行文件。

静态链接:使用静态链接库,链接器从静态链接库lib获取所有被引用函数,并将库同代码一起放到可执行文件中。

动态链接:使用动态链接库,允许可执行模块(.dll文件或者.exe文件)仅包含在运行时定位dll函数的可执行代码所需的信息。

如何使用动态库?隐式链接与显式链接又是怎么回事呢?其实这两种链接方式只是dll的两种不同的加载方式而已。

隐式链接:1.Property->Linker->Input->Additional Dependencies中添加.lib文件,或者在源代码中加入指令#pragma comment(lib,"XX.lib")

2. Property->Linker->Input->Additional Library Directories中配置.lib文件所在的相对路径

3. 将.dll文件置入工程所在目录,然后添加对应的.h头文件

显式链接:需要函数指针和WIN32 API函数:LoadLibrary、GetProcAddress装载,使用这种载入方式,不需要.lib文件和.h头文件,只需要.dll文件即可(将.dll文件放到工程目录中)。

写一个静态库以及使用静态库的整个流程:

1.新建Win32 Project工程,Application type选择Static library类型。新建的工程中有stdafx.h和cpp,在上一篇博文中已介绍。

2.这次就写一个支持加/减操作的lib,新增MyMath.h和MyMath.cpp。

MyMath.h:

 1 #ifndef _MY_STATIC_LIB_H_
 2 #define _MY_STATIC_LIB_H_
 3
 4 class MyMath
 5 {
 6 public:
 7     MyMath();
 8     ~MyMath();
 9
10     int Add(int nNumA, int nNumb);
11     int Sub(int nNumA, int nNumb);
12 };
13 #endif // _MY_STATIC_LIB_H_

MyMath.cpp

 1 #include "stdafx.h"
 2 #include "MyMath.h"
 3
 4 MyMath::MyMath()
 5 {
 6 }
 7
 8 MyMath::~MyMath()
 9 {
10 }
11
12 int MyMath::Add(int nNumA, int nNumb)
13 {
14     return nNumA + nNumb;
15 }
16
17 int MyMath::Sub(int nNumA, int nNumb)
18 {
19     return nNumA - nNumb;
20 }

使用MyMath.lib的工程需要以下配置:

1.属性C/C++->General->Additional Include Directories要配置MyMath.h文件所在的相对路径。

2.属性Linker->General->Additional Library Directories要配置MyMath.lib文件所在的相对路径。

3.属性Linker->Input->Additional Dependencies中添加MyMath.lib。这一步或者可以改为在使用该lib的工程cpp中添加:#pragma comment(lib, "MyMath.lib")

4.最后在使用的cpp中添加#include <MyMath.h>

 1 #include "stdafx.h"
 2 #include <MyMath.h>
 3 #include <iostream>
 4
 5 using namespace std;
 6
 7 int main()
 8 {
 9     MyMath  MyMath;
10     int     nNumA   = 10;
11     int     nNumB   = 10;
12     int     nResult = 0;
13
14     nResult = MyMath.Add(nNumA, nNumB);
15     cout << nResult << endl;
16
17     nResult = MyMath.Sub(nNumA, nNumB);
18     cout << nResult << endl;
19
20     return 0;
21 }

写一个动态库以及使用动态库的整个流程:

1.新建Win32 Project工程,Application type选择dll类型。新建的工程里面会发现比静态库多一个dllmain.cpp。

2.同以上静态库一样,支持加、减操作。新增MyMath.h和MyMath.cpp。

时间: 2024-10-27 09:15:52

lib和dll的区别与使用的相关文章

LIB和DLL的区别与使用(转载)

转载自:http://www.cppblog.com/amazon/archive/2009/09/04/95318.html 共有两种库:一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library.一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library.共有两种链接方式:动态链接使用动态链接库,允许可执行模块(.dll文件或.e

LIB 和 DLL的区别(转载)

转自:LIB和DLL的区别与使用 共有两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library.一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library. 共有两种链接方式:动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅包含在运行时定位DLL函数的可执行代码所需的信息.静态链接使用静态链接库,链接

C/C++ 知识点---LIB和DLL的区别与使用

LIB和DLL的区别与使用 原文链接:http://www.cppblog.com/amazon/archive/2009/09/04/95318.html 共有两种库:一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library.一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library.共有两种链接方式:动态链接使用动态链接库,允许

C++:LIB和DLL的区别与使用

共有两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library. 一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library. 共有两种链接方式: 动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅包含在运行时定位DLL函数的可执行代码所需的信息. 静态链接使用静态链接库,链接器从静态链接库LIB获取所有

[C/C++]windows环境下lib和dll的区别和联系(待整理)

c++中共有两种库:1.LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library.(这种方式更灵活,写的程序体积小,但是需要.exe和dll同时发布)2.LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library.(这种方式不是很灵活,因为lib被编译到.exe中,写出的程序体积大,但是只需要发布exe即可,不需要dll文件)共有两种链接方式:

windows环境下lib和dll的区别和联系详细

c++中共有两种库: 1.LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library.(这种方式更灵活,写的程序体积小,但是需要.exe和dll同时发布) 2.LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library.(这种方式不是很灵活,因为lib被编译到.exe中,写出的程序体积大,但是只需要发布exe即可,不需要dll文件) 共有两种链接

两个月后才更新一篇。。。。LIB和DLL的区别

 共有两种库: 一种是LIB包含了函数所在的DLL文件和文件中函数位置的信息(入口),代码由运行时加载在进程空间中的DLL提供,称为动态链接库dynamic link library. 一种是LIB包含函数代码本身,在编译时直接将代码加入程序当中,称为静态链接库static link library. 共有两种链接方式: 动态链接使用动态链接库,允许可执行模块(.dll文件或.exe文件)仅包含在运行时定位DLL函数的可执行代码所需的信息. 静态链接使用静态链接库,链接器从静态链接库LIB获

lib 和 dll 的区别、生成以及使用详解

首先介绍一下静态库(静态链接库).动态库(动态链接库)的概念,首先两者都是代码共享的方式. 静态库:在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件中,这种库称为静态库,其特点是可执行文件中包含了库代码的一份完整拷贝:缺点就是被多次使用就会有多份冗余拷贝.即静态库中的指令都全部被直接包含在最终生成的 EXE 文件中了.在vs中新建生成静态库的工程,编译生成成功后,只产生一个.lib文件 动态库:动态链接库是一个包含可由多个程序同时使用的代码和数据的库,DLL不是可执行文件.动

lib 和 dll 的区别、生成以及使用详解(转)

原文章地址:https://www.cnblogs.com/TenosDoIt/p/3203137.html#c 首先介绍一下静态库(静态链接库).动态库(动态链接库)的概念,首先两者都是代码共享的方式. 静态库:在链接步骤中,连接器将从库文件取得所需的代码,复制到生成的可执行文件(链接过程就已经复制好了)中,这种库称为静态库,其特点是exe中包含了库代码的一份完整拷贝:缺点就是被多次使用就会有多份冗余拷贝.即静态库中的指令都全部被直接包含在最终生成的 EXE 文件中了.在vs中新建生成静态库的