无法 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)
我已经尝试将 libcmt
和 MSVCRT
添加到我的 linker 依赖项中,但没有成功。
似乎我的 DLL 无法使用 /MT
标志进行编译,无论 linking libprotobuf
与否。 我错过了什么?
通读protobuf CMakeLists后,我找到了以下解决方案:
-Dprotobuf_MSVC_STATIC_RUNTIME=OFF
必须传递给 cmake 命令,使 protobuf 使用 /MD
而不是 /MT
。
我正在尝试 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)
我已经尝试将 libcmt
和 MSVCRT
添加到我的 linker 依赖项中,但没有成功。
似乎我的 DLL 无法使用 /MT
标志进行编译,无论 linking libprotobuf
与否。 我错过了什么?
通读protobuf CMakeLists后,我找到了以下解决方案:
-Dprotobuf_MSVC_STATIC_RUNTIME=OFF
必须传递给 cmake 命令,使 protobuf 使用 /MD
而不是 /MT
。