连接标准库失败

Failed to link with standard library

本文关键字:失败 标准 连接      更新时间:2023-10-16

我正试图将libprotobuf链接到我的项目。为了做到这一点,我已经将libprotobuf编译为一个动态库,它在我的库路径中。

但是,当使用/MD编译时,我从链接器得到以下错误:

 3>libprotobuf.lib(int128.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease' in component.obj [C:ProjekteP3D-ECSp3d_e

因此,我将标志从/MD改为/MT,这些都消失了。然而,现在链接器无法链接标准库,并且找不到像std::basic_ostream这样的符号,有很多这样的错误:

error LNK2001: unresolved external symbol "__declspec(dllimport) public: __int64 __cdecl std::basic_streambuf<char,struct std::char_traits<char> >::sputn(char const *,__int64)" (__imp_?sputn@?$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA_JPEBD_J@Z)

我已经尝试添加libcmtMSVCRT到我的链接器依赖,没有成功。

似乎我的DLL根本无法与/MT标志编译,无论链接libprotobuf与否。我错过了什么?

在阅读了protobuf CMakeLists之后,我发现了以下解决方案:

-Dprotobuf_MSVC_STATIC_RUNTIME=OFF

必须传递给cmake命令,使protobuf使用/MD而不是/MT