我有一个DLL,其中包含一个静态成员的类.我用__declspec(dllexport)它来使用这个类的方法.但是当我将它链接到另一个项目并尝试编译它时,我得到静态数据的"未解析的外部符号"错误.
例如,在DLL中,Test.h
class __declspec(dllexport) Test{
protected:
static int d;
public:
static void m(){int x = a;}
}
Run Code Online (Sandbox Code Playgroud)
在DLL中,Test.cpp
#include "Test.h"
int Test::d;
Run Code Online (Sandbox Code Playgroud)
在使用Test的应用程序中,我调用m().
我也尝试分别为每个方法使用__declspec(dllexport),但我仍然得到静态成员的相同链接错误.
如果我使用dumpbin检查DLL(.lib),我可以看到符号已导出.
例如,应用程序在链接时给出以下错误:
1>Main.obj : error LNK2001: unresolved external symbol "protected: static int CalcEngine::i_MatrixRow" (?i_MatrixRow@CalcEngine@@1HA)
Run Code Online (Sandbox Code Playgroud)
但是.lib的dumpbin包含:
Version : 0
Machine : 14C (x86)
TimeDateStamp: 4BA3611A Fri Mar 19 17:03:46 2010
SizeOfData : 0000002C
DLL name : CalcEngine.dll
Symbol name : ?i_MatrixRow@CalcEngine@@1HA (protected: static int CalcEngine::i_MatrixRow)
Type : data
Name type : …Run Code Online (Sandbox Code Playgroud)