LINKER error: comsupp.lib and comsuppwd.lib

LINKER error: comsupp.lib and comsuppwd.lib

错误是:

Error 14 error LNK2005: "void __stdcall _set_com_error_handler(void (__stdcall*)(long,struct IErrorInfo *))" (?_set_com_error_handler@@YGXP6GXJPAUIErrorInfo@@@Z@Z) already defined in comsupp.lib(comsupp.obj) comsuppwd.lib

以前有人运行参与过这个吗?

错误现已解决。错误的原因是一个头文件:#include <msclr\marshal_cppstd.h>和从System::String^std::string的转换(我发现了一个类似的问题here):

//commented out following 3 lines and problem solved:
//looks like following type conversion has problems:
#include <msclr\marshal_cppstd.h>
msclr::interop::marshal_context marshal_context_1;
string_TempDir_XMLfiles=marshal_context_1.marshal_as<std::string>(String_Ptr_Destin_Dir_XMLfiles);

Visual Studio 2010 header <msclr/marshal.h> 中存在错误。 有写

#pragma comment(lib, "comsupp.lib")

但是相对于<comdef.h>必须写成

#ifdef _NATIVE_WCHAR_T_DEFINED
# ifdef _DEBUG
# pragma comment(lib, "comsuppwd.lib")
# else
# pragma comment(lib, "comsuppw.lib")
# endif
#else
# ifdef _DEBUG
# pragma comment(lib, "comsuppd.lib")
# else
# pragma comment(lib, "comsupp.lib")
# endif
#endif

另见 https://docs.microsoft.com/de-de/cpp/cpp/set-com-error-handler?view=vs-2019

中的 Lib-section

所以你有 2 个选项

  1. 错误:编辑 C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\msclr\marshal.h 中的 msclr/marshal.h。但是所有同事也必须更改他们的文件。
  2. 更改项目设置 Linker -> Input -> Ignore Specific Default Libraries 并添加 commsupp.lib。 !!!但是请注意,如果您设置了编译器选项 /Zc: wchar_t-(请参阅 C/C++ -> Language -> Treat WChar_t as Built in Type)并且为 Release 进行编译,那么一定不能忽略它! !!所以每个项目的配置may/must都要改成不同的。