C++ 使用stringstream链接错误

C++ 使用stringstream链接错误,c++,opencv,C++,Opencv,我正在构建一个与OpenCV库静态链接的win32应用程序。在第一次尝试时,构建日志指示我忽略默认库msvcprtd.lib和libcmtd.lib,因为有很多链接错误,例如 "LIBCMTD.lib(sprintf.obj) : error LNK2005: _sprintf already defined in MSVCRTD.lib(MSVCR100D.dll)" 构建日志中的最后两句话是 1>LINK : warning LNK4098: defaultlib 'MSVCRTD'

我正在构建一个与OpenCV库静态链接的win32应用程序。在第一次尝试时,构建日志指示我忽略默认库msvcprtd.lib和libcmtd.lib,因为有很多链接错误,例如

"LIBCMTD.lib(sprintf.obj) : error LNK2005: _sprintf already defined in MSVCRTD.lib(MSVCR100D.dll)"
构建日志中的最后两句话是

1>LINK : warning LNK4098: defaultlib 'MSVCRTD' conflicts with use of other libs; use /NODEFAULTLIB:library
1>LINK : warning LNK4098: defaultlib 'LIBCMTD' conflicts with use of other libs; use /NODEFAULTLIB:library
排除这两个库后,我无法使用stringstream或cout,因为我遇到以下生成错误:

error LNK2001: unresolved external symbol "__declspec(dllimport) class std::basic_ostream<char,struct std::char_traits<char> > std::cout" (__imp_?cout@std@@3V?$basic_ostream@DU?$char_traits@D@std@@@1@A)
1>run.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: virtual __thiscall std::basic_iostream<char,struct std::char_traits<char> >::~basic_iostream<char,struct std::char_traits<char> >(void)" (__imp_??1?$basic_iostream@DU?$char_traits@D@std@@@std@@UAE@XZ) referenced in function __unwindfunclet$??0?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@H@Z$0
1>run.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: __thiscall std::basic_iostream<char,struct std::char_traits<char> >::basic_iostream<char,struct std::char_traits<char> >(class std::basic_streambuf<char,struct std::char_traits<char> > *)" (__imp_??0?$basic_iostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@std@@@1@@Z) referenced in function "public: __thiscall std::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >::basic_stringstream<char,struct std::char_traits<char>,class std::allocator<char> >(int)" (??0?$basic_stringstream@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@QAE@H@Z)
1>run.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) protected: void __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::setp(char *,char *,char *)" (__imp_?setp@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z) referenced in function "protected: virtual int __thiscall std::basic_stringbuf<char,struct std::char_traits<char>,class std::allocator<char> >::overflow(int)" (?overflow@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MAEHH@Z)
1>run.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) protected: char * __thiscall std::basic_streambuf<char,struct std::char_traits<char> >::pbase(void)const " (__imp_?pbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ) referenced in function "protected: virtual int __thiscall std::basic_stringbuf<char,struct std::char_traits<char>,class std::allocator<char> >::overflow(int)" (?overflow@?$basic_stringbuf@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@MAEHH@Z)
错误LNK2001:未解析的外部符号“\uuu declspec(dllimport)类标准::基本\uu ostream标准::cout”(\uuu imp??cout@std@@3V?$basic_ostream@DU?$char_traits@D@性病@@@1@A)
1> run.obj:错误LNK2019:未解析的外部符号“\uu declspec(dllimport)public:virtual\uu thiscall std::basic\u iostream::~basic\u iostream(void)”(\uu imp\u1?$basic_iostream@DU?$char_traits@D@std@@@std@@UAE@XZ)在函数uu unwindfunclet$??0?$basic中引用_stringstream@DU?$char_traits@D@性病病毒$allocator@D@2@@std@@QAE@H@Z$0
1> run.obj:错误LNK2019:未解析的外部符号“\u declspec(dllimport)public:\u thiscall std::basic\u iostream::basic\u iostream(类std::basic\u streambuf*)”(\u imp\u0?$basic_iostream@DU?$char_traits@D@std@@@std@@QAE@PAV?$basic_streambuf@DU?$char_traits@D@函数中引用了std@@@1@@Z)“public:u thiscall std::basic_stringstream::basic_stringstream(int)”(?0?$basic_stringstream@DU?$char_traits@D@性病病毒$allocator@D@2@@std@@QAE@H@Z)
1> run.obj:错误LNK2019:未解析的外部符号“\u declspec(dllimport)protected:void\u thiscall std::basic\u streambuf::setp(char*,char*,char*)”(\u imp\u setp@$basic_streambuf@DU?$char_traits@D@std@@@std@@IAEXPAD00@Z)函数“protected:virtual int\uu thiscall std::basic\u stringbuf::overflow(int)”中引用(?溢出@?$basic)_stringbuf@DU?$char_traits@D@性病病毒$allocator@D@2@@std@@MAEHH@Z)
1> run.obj:错误LNK2019:未解析的外部符号“\uu declspec(dllimport)protected:char*\uu thiscall std::basic\u streambuf::pbase(void)const”(\uu imp\upbase@?$basic_streambuf@DU?$char_traits@D@std@@@std@@IBEPADXZ)在函数“protected:virtual int\uu thiscall std::basic\u stringbuf::overflow(int)”中引用(?溢出@?$basic)_stringbuf@DU?$char_traits@D@性病病毒$allocator@D@2@@std@@MAEHH@Z)

任何人都会遇到类似的错误?

每当Visual Studio开始抱怨
msvcrd.lib
LIBCMTD.lib
之间存在冲突时,您可以确定您正在链接在MicroFT运行时元素中链接不一致的项目


您提到您正在使用的OpenCV是静态链接的,我敢打赌您的项目是动态链接的。您应该设置解决方案文件,以便静态链接所有项目或动态链接所有项目。

听起来OpenCV静态库是针对不同的MSVS运行时创建的。您是否阅读发行说明?有关格式帮助,请参阅。