VS中创建静态库&C/C++静态库的使用

时间:2021-07-09 09:14:00

静态库: 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  转载请标明来源