2010-10-26 39 views
2

我在Visual Studio中对C++有点新,我试图用Visual Studio编译一个庞大的C++项目。我已经完成了所有的源代码和头文件,并将其添加到了我的项目中,并且还更新了项目属性中的所有包含路径。C++项目编译为静态库,但不是动态的(Visual Studio)

如果我将项目类型设置为“静态库(.Lib)”,则该项目将无错误地编译,我将拥有一个不错的.lib文件。

如果我将项目更改为“动态库(.dll)”,项目不再编译并且链接错误失败。

这里有一个示例:

Error 27 error LNK2001: unresolved external symbol "char const * __cdecl Project::toString(enum Project::compMode)" ([email protected]@@[email protected]@@Z) H:\repo.project\user\tool\component.obj tool 

什么可能会发生在这里的任何帮助或背景?

+1

其中是项目:: toString定义/实施?你只有一个项目还是有依赖关系? – 2010-10-26 16:21:29

回答

4

检查,如果你定义了以下成员函数

char const* Project::toString(Project::compMode) 

当你编译为静态库的未解决的符号是不是一个错误,因为它可以当你与其他代码链接以后解决。

您可能忘记将一些.cpp文件添加到您的项目中。

+0

我确实!但问题是,如果我错过了.cpp文件,为什么它会编译为lib而不是dll? – Nick 2010-10-26 16:57:53

+0

静态库只是对象文件的集合,它可能包含您正在使用但尚未定义的符号。另一方面,dll和exectutables应该具有除dllimport属性被解析的所有符号(粗略地说)。 – vitaut 2010-10-26 17:01:07

相关问题