LNK2001& LNK1120在项目中包含DLL时 - MSVC ++

时间:2012-02-01 23:57:04

标签: visual-c++ dll extern lnk2001

我有一个DLL和lib文件。我已将它们包含在根源目录中,并通过Additional Dependencies添加了lib引用。但是,我收到以下错误:

1>main.obj : error LNK2001: unresolved external symbol "class game::c_State game::state" (?state@game@@3Vc_State@1@A)
fatal error LNK1120: 1 unresolved externals

将从“engine.h”引用它:

extern __declspec(dllexport) c_State state;

在“state.cpp”中(来自DLL的源代码),它被声明为

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

难道我需要将DLL放在特定的位置吗? Windows知道在哪里看?我发现在属性中没有专门引用DLL文件,只有lib文件。

另外,在声明变量或仅声明函数时是否需要__declspec(dllexport)?

提前致谢!

1 个答案:

答案 0 :(得分: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项目中使用Project + Properties,C / C ++,Proprocessor。将FOO_EXPORTS添加到预处理器定义。