静态链接库

1. 动态链接库与静态链接库的相同点

  (1)都是采用代码共享的方式

  (2)都是采用代码封装的方式提供功能

2. 动态链接库和静态链接库的不同点

  (1)静态链接库被包含在宿主文件中,而动态链接库则是在需要的时候装载和卸载DLL文件。

  (2)静态链接库中不能再包含其它静态或动态链接库,而动态链接库中则可以。

3. 动态链接库的优点和缺点

  (1)优点

    动态链接库不是执行程序的一部分,而是根据执行程序需要按需装入,同时其执行代码可在多个执行程序间共享,节省了空间,提高了效率,具备很高的灵活性。适用于大规模的软件开发,使开发过程独立、耦合度小,便于不同开发者和开发组织之间进行开发和测试。

    ①共享:多个应用程序可以使用同一个动态库,启动多个应用程序的时候,只需要将动态库加载到内存一次即可。

    ②开发模块好:要求设计者对功能划分的比较好。

    ③DLL的编制与具体的编程语言及编译器无关,只要遵循约定的DLL接口规范和调用方式,用各种语言编写的DLL都可以相互调用。

  (2)缺点

    使用动态链接库的程序必须将动态链接库部署到相应的环境中,若动态链接库不存在,程序必然会报错!

    其次,程序的加载速度比静态链接慢。当某个模块更新后,如果新模块与旧的模块不兼容,那么那些需要该模块才能运行的软件,统统撕掉。这在早期Windows中很常见。

4. 静态链接库的优点和缺点

  (1)优点

    代码装载速度快,执行速度略比动态链接库快;只需保证在开发者的计算机中有正确的 .LIB文件,再以二进制形式发布程序时不需考虑在用户的计算机上.LIB文件是否存在及版本问题,可避免DLL地狱问题。

  (2)缺点

    使用静态链接生成的可执行文件体积较大,包含相同的公共代码,造成浪费;但是如果多个应用程序使用的话,会被装载多次,浪费内存。

5. 静态链接库的实现

    新建一个Static Library工程,并添加lib.h和lib.cpp两个文件:

//lib.h

extern "C" int add(int x, int y);

  

//lib.cpp

#include "lib.h"

int add(int x, int y)
{
	return (x + y);
}

  编译这个工程后就得到了.lib文件,这个文件就是一个函数库,它提供add功能。将头文件(lib.h)和.lib文件交给用户后,用户就可以直接使用其中的add函数了。

6. 静态链接库的调用

#include "stdafx.h"
#include <iostream>
using namespace std;

#include "..Liblib.h"
#pragma comment(lib, "..\Lib\StaticLib.lib")

int main()
{
	cout << "2 + 3 = " << add(2, 3) << endl;

	getchar();
    return 0;
}

  

原文地址:https://www.cnblogs.com/YQ2014/p/9796442.html