【发布时间】:2012-01-15 11:11:25
【问题描述】:
我有一个 Dll,它有 4 个文件头文件-1.StreamReader.h 2.StreamWriter.h 源文件-StreamReader.cpp 2.StreamWriter.cpp in windows VS2008。
StreamReader.h
Class StreamReader{
public:
static __declspec(dllexport) StreamReader* GetInstance();
//other functions
private:
StreamReader(){}
~StreamReader(){}
static StreamReader *m_pInstance;
};
StreamReader.cpp
StreamReader *StreamReader::m_pInstance=NULL;
StreamReader *StreamReader::GetInstance()
{
return((m_pInstance==NULL)?m_pInstance=new StreamReader:m_PInstance);
}
//other functions
StreamWriter 和 GetInstance() 的结构非常相似。
当我在 exe 中静态链接到这个 dll 时,它会在编译过程中报错
错误 LNK2001:无法解析的外部符号“私有:静态类 StreamReader * StreamReader::m_pInstance" (?m_pInstance@StreamReader@@0PAV1@A)
错误 LNK2019:未解决 外部符号“公共:静态类 StreamReader * __cdecl StreamReader::GetInstance(void)" (?GetInstance@StreamReader@@SAPAV1@XZ) 在函数_main中引用
exe也是用c++编写的。但它可以找到 StreamWriter 符号。 StreamWriter 和 StreamReader 文件本质上是相同的,除了一个读取文件和一个写入文件这一事实。我错过了什么?谢谢
【问题讨论】:
-
StreamREAder中有趣的大写字母是转录到 Stack Overflow 时的错误(请使用复制和粘贴!)还是您的源代码中有错误? -
这是一个很酷的问题......但遗憾的是,这只是我的打字技巧而不是我的编程的一个缺点!
-
不要输入...直接复制进去。
-
静态链接到DLL是什么意思?您是否正在链接导入库?使用 dumpbin 检查符号是否正确导出。
-
@Gene 哦,我的意思是链接到导入库,dumpbin 向我显示了错误中显示的 GetInstance() 方法的确切名称。
标签: c++ dll linker-errors