静态链接库
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 "..\Lib\lib.h" #pragma comment(lib, "..\\Lib\\StaticLib.lib") int main() { cout << "2 + 3 = " << add(2, 3) << endl; getchar(); return 0; }
posted on 2018-10-16 21:59 FlyingPig007 阅读(365) 评论(0) 编辑 收藏 举报