VS2010在ostream上链接问题

时间:2012-05-11 10:35:39

标签: c++ visual-c++ mfc linker-errors

我收到了这些错误:

1>test.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: void __thiscall     std::basic_ofstream<char,struct std::char_traits<char> >::`vbase destructor'(void)" (__imp_??_D?  $basic_ofstream@DU?$char_traits@D@std@@@std@@QAEXXZ) referenced in function _main
1>test.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall    std::basic_ofstream<char,struct std::char_traits<char> >::basic_ofstream<char,struct std::char_traits<char>>(void)" (__imp_??0?$basic_ofstream@DU?$char_traits@D@std@@@std@@QAE@XZ) referenced in function _main

此测试代码工作正常:

int main(int argc, char **argv)
{
    std::ofstream game_record_output;
}

直到我从一个从VS 2003 .NET转换的旧项目中包含.h

首先,我认为它可能会遇到一些问题:

http://msdn.microsoft.com/en-us/library/8h8eh904(v=vs.90).aspx

但是,我已经检查过MSVCRT.LIB和MSVCPRT.LIB正在被链接,所以旧的iostream没有被链接......

我不确定为什么会发生这种情况,我假设在包含链中包含了一些错误的文件,但我已经在旧的iostream .h的文件中搜索了包含链(即:(fstream.h) ,iomanip.h,ios.h,iostream.h,istream.h,ostream.h,streamb.h和strstrea.h))

那么,还有什么我应该检查的吗?

该项目使用MFC。

2 个答案:

答案 0 :(得分:0)

根据以下内容更改Properties中的Visual Studio项目C/C++ -> Code Generation -> Runtime Library设置:

  • 用于调试配置的多线程调试DLL(/ MDd)
  • 用于发布配置的多线程DLL(/ MD)

答案 1 :(得分:0)

此页面包含LNK2019的一些原因:https://msdn.microsoft.com/en-us/library/799kze2z.aspx。特别是,从VS 2003升级可能会触发此问题:

  

构建依赖项仅定义为项目依赖项   解。在早期版本的Visual Studio中,这个级别   依赖就足够了。但是,从Visual Studio 2010开始,   Visual Studio需要项目到项目的引用。如果你的项目   没有项目到项目的参考,你可能会收到这个   链接器错误。添加项目到项目的引用来修复它。

或者

  

将使用本机wchar_t的代码与不使用本机wchar_t的代码混合使用。 C ++   在Visual C ++ 2005中完成的语言一致性工作   wchar_t默认为本机类型。你必须使用/ Zc:wchar_t-   编译器选项,用于生成与编译的模块兼容的代码   使用早期版本的Visual C ++。如果不是所有模块都已   通过使用相同的/ Zc:wchar_t设置编译,类型引用可以   不解析兼容类型。验证所有wchar_t类型   模块是兼容的,或者通过更新使用的类型,或者   通过在编译时使用一致/ Zc:wchar_t设置。