2012-02-01 86 views
1

我有一個DLL和lib文件。我將它們包含在根源目錄中,並通過附加依賴項添加了lib引用。不過,我得到以下錯誤:LNK2001和LNK1120包括項目DLL時 - MSVC++

1>main.obj : error LNK2001: unresolved external symbol "class game::c_State game::state" ([email protected]@@[email protected]@A) 
fatal error LNK1120: 1 unresolved externals 

這會從 「engine.h」 被引用的:

extern __declspec(dllexport) c_State state; 

在 「state.cpp」(從DLL的源),現聲明as

namespace game 
{ 
    c_State state; 
    //clipped for relevance 
} 

難道是我需要將DLL放在某個特定的地方嗎? Windows知道去哪裏看?我在屬性中找不到專門引用DLL文件的地方,只有lib文件。

另外,不要聲明變量,或者只有函數時,我需要一個__declspec(dllexport)的?

在此先感謝!

回答

1

您必須申請__declspec(dllexport)的的定義,而不是聲明。此外,聲明需要__declspec(dllimport的)中的其他項目。所以在.h文件:

#undef EXPORT 
#ifdef FOO_EXPORTS 
# define EXPORT __declspec(dllexport) 
#else 
# define EXPORT __declspec(dllimport) 
#endif 

extern EXPORT int shared; 

在DLL源代碼文件:

__declspec(dllexport) int shared; 

而在DLL項目中使用項目+屬性,C/C++,Proprocessor。將FOO_EXPORTS添加到預處理器定義。

+0

感謝您的。我假設ifdef和else語句是爲了便攜性。如果我決定要編譯引擎在Linux下我可以簡單地刪除FOO_EXPORTS,然後它會(假設否則移植的代碼)編譯。 – screennameless 2012-02-02 01:22:44