静态库: Static Libaray
在Linux环境中,通常编译出的结果以.a结尾,相当于是obj文件打包形成的结果。
在Window环境中,和动态库一样,也是以.lib结尾,不过大小也远大于同等情况的动态库。因为动态库.lib只有声明相关信息,静态库.lib是包含了所有编译obj结果。
在VS中定义静态库的方法是:
方法1:创建dll工程的时候,选择静态库选项
方法2:已创建dll的工程属性,设置为:静态链接库
在VS中定义静态函数导出函数的方法是:
其实这样说不太合理,静态库中的函数都可以认为是导出的,静态库相当与工程中编译出的obj文件,使用时,像使用项目中的一样。
Window下静态库导出函数:不需要dllexport声明,只需要属性配置为:静态库 (对比动态库导出函数:是需要dllexport声明的)
如果调用方也是C++的话,不需要处理函数名称重载的问题,但如果调用方是非C++的话,对于外部实用的函数需要添加:
extern "C" {
函数声明定义1;
函数声明定义2:
};
例如:函数名称max没有被C++重载处理为形如max_int_int名称,导致外部使用max找不到函数
静态库的使用:
静态库的使用和动态库类似,也是使用#pragma comment(lib,"xxx.lib") 加载,不过使用的时候,和使用其它.cpp中的函数效果一样:
1. 包含头文件,然后使用
2. 声明后使用
例如:
extern int max(int x, int y); // 声明使用其他cpp中定义函数
... 后面就可以直接用了,如 int a = max(1, 10);
另外,对于在C++中使用C的静态库:需要加上 extern "C",同样是为了解决名称在C++中会被重载的问题。
extern "c" {
#include "xxx.h"
}
Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu 转载请标明来源