__declspec(dllexport)
来使用这个类的方法。但是当我将其链接到另一个项目并尝试编译它时,我会得到静态数据的"未解析外部符号"错误。
例如,在DLL中,Test.h。class __declspec(dllexport) Test{
protected:
static int d;
public:
static void m(){int x = a;}
}
在 DLL 中,Test.cpp 文件中:
#include "Test.h"
int Test::d;
在使用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)
但是.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 : name
Hint : 31
Name : ?i_MatrixRow@CalcEngine@@1HA
我无法解决这个问题。我做错了什么?如何克服这些错误?
顺便说一下,这段代码最初是为Linux开发的,.so/binary组合没有任何问题
编辑:在给定的情况下,静态变量并不是由应用直接引用的,但是由于该方法被内联到头文件中,因此出现了链接错误。通过将这些方法移动到.cpp文件中,我成功地解决了链接错误。