.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)
本文來自博客園,作者:七星落地,轉載請注明原文鏈接:http://www.rzrgm.cn/dwx-bzdcxy/p/14955558.html
浙公網安備 33010602011771號