我有一个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)?
提前致谢!
答案 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添加到预处理器定义。