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