.h 头文件

class MYNETENGINESHARED_API NetEngineManager :
public ISafeBase,
public INetModuleInInterface
{
friend class IObjectNetEngine;
public:
NetEngineManager(void);
virtual ~NetEngineManager(void);

private:
static NetEngineManager* m_pInstance;
public:
static NetEngineManager* GetInstance(){return m_pInstance;}

。。。

 

.cpp源文件代码


NetEngineManager* NetEngineManager::m_pInstance = NULL;
NetEngineManager::NetEngineManager(void):
ISafeBase(eModule_NetEngineManager)
{
if(m_pInstance == NULL)
{
m_pInstance = this;
}
}

编译提示错误

2> 所有输出均为最新。
2>Link:
2> 正在创建库 ..\..\Output\Debug\UploadEngine.lib 和对象 ..\..\Output\Debug\UploadEngine.exp
2>stdafx.obj : error LNK2001: 无法解析的外部符号 "private: static class NetEngineManager * NetEngineManager::m_pInstance" (?m_pInstance@NetEngineManager@@0PAV1@A)
2>XmlDatabase.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall IDatabaseInterface::IDatabaseInterface(void)" (??0IDatabaseInterface@@QAE@XZ),该符号在函数 "public: __thiscall CXmlDatabase::CXmlDatabase(void)" (??0CXmlDatabase@@QAE@XZ) 中被引用
2>XmlDatabase.obj : error LNK2019: 无法解析的外部符号 "public: virtual __thiscall IDatabaseInterface::~IDatabaseInterface(void)" (??1IDatabaseInterface@@UAE@XZ),该符号在函数 __unwindfunclet$??0CXmlDatabase@@QAE@ABV0@@Z$1 中被引用
2>..\..\Output\Debug\UploadEngine.dll : fatal error LNK1120: 3 个无法解析的外部命令

解答如下:
这是由于导出类的修饰错误,对于dll本身来讲,修饰应该是__declspec(dllexport),而对于调用者来讲,应该是__declspec(dllimport)。而为了正确的编译修饰,可以声明如下:
#ifdef MY_DLL_EXPORT
#define _DLL_EXPORT_ __declspec(dllexport)
#else
#define _DLL_EXPORT_ __declspec(dllimport)
#endif
将MY_DLL_EXPORT加到dll 工程的预编译定义中。
现在你可以使用_DLL_EXPORT_宏来修饰你任何想导出的类或函数了

预编译添加 MY_DLL_EXPORT。这个这样__declspec(dllexport) 和_declspec(dllimport)都会编译一下。_declspec(dllimport)管 头文件的 lib 连接。这样才能编译到lib里面。

 我估计这就是要没有输出静态lib,执行这条宏编译__declspec(dllimport)

posted on 2021-06-30 17:31  七星落地  阅读(117)  评论(0编辑  收藏  举报