无法 link 使用标准库

Failed to link with standard library

我正在尝试 link libprotobuf 我的项目。为此,我已经将 libprotobuf 编译为动态库,它位于我的库路径中。

然而,当使用 /MD 编译时,我从 linker 得到以下错误:

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

所以,我将标志从 /MD 更改为 /MT,然后那些就消失了。但是,现在 linker 无法 link 标准库,并且无法找到像 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 添加到我的 linker 依赖项中,但没有成功。

似乎我的 DLL 无法使用 /MT 标志进行编译,无论 linking libprotobuf 与否。 我错过了什么?

通读protobuf CMakeLists后,我找到了以下解决方案:

-Dprotobuf_MSVC_STATIC_RUNTIME=OFF

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