共享库中的静态类成员
-
06-07-2019 - |
题
我有一个像这样的课程
class K {
static int a;
static int b;
}
我想创建一个包含此类的共享库(dll) K
. 。在我调用的库中编译的 cpp 文件中
int K::a = 0;
int K::b = 0;
实例化静态变量。该 dll 编译时没有错误,但是当我使用该库时,我收到成员的未解析的外部符号错误 K::a
和 K::b
. 。在我想使用它的主程序中,我在类声明中包含相同的标头 K
, ,唯一的区别是对于我使用的库 class __declspec( dllexport ) K { ... }
对于主程序 class K { ... }
可能我犯了不止一个错误,所以我的问题是,我怎样才能
- 告诉链接器共享库中的静态成员类?
- 在主程序中使用库中实例化的静态类成员?
附言。我使用 Visual Studio 2008...
解决方案
一个应该使用 __declspec( dllimport )
在主应用程序的标题中。
所以这就是解决方案。头文件(包含在库和主应用程序中)是:
#ifdef COMPILE_DLL
#define DLL_SPEC __declspec( dllexport )
#else
#define DLL_SPEC __declspec( dllimport )
#endif
class DLL_SPEC K {
static int a;
static int b;
}
库中的cpp文件包含:
int K::a = 0;
int K::b = 0;
要编译该库,必须定义宏 COMPILE_DLL,对于主应用程序不应该定义它。
其他提示
静态链接库而不是动态链接。
或者在 DLL 中添加一个返回值的全局函数。
不隶属于 StackOverflow