Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/159.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法链接到标准库_C++_Visual Studio 2015_Linker_Protocol Buffers - Fatal编程技术网

C++ 无法链接到标准库

C++ 无法链接到标准库,c++,visual-studio-2015,linker,protocol-buffers,C++,Visual Studio 2015,Linker,Protocol Buffers,我正在尝试将libprotobuf链接到我的项目。为了做到这一点,我已经将libprotobuf编译成一个动态库,它位于我的库路径上 但是,当使用/MD编译时,我从链接器中得到以下错误: 3>libprotobuf.lib(int128.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MT_StaticRelease' doesn't match value 'MD_DynamicRelease'

我正在尝试将
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:\Projekte\P3D-ECS\p3d_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)
错误LNK2001:未解析的外部符号“\uu declspec(dllimport)public:\uu int64\uu cdecl std::basic\u streambuf::sputn(char const*,\uu int64)”(\uu imp\uu sputn@$basic_streambuf@DU?$char_traits@D@std@@@std@@QEAA\U JPEBD_J@Z)
我已经尝试将
libcmt
MSVCRT
添加到我的链接器依赖项中,但没有成功


似乎我的DLL根本无法使用
/MT
标志编译,无论是否链接
libprotobuf
我遗漏了什么?

在阅读了protobuf CmakeList之后,我找到了以下解决方案:

-Dprotobuf_MSVC_STATIC_RUNTIME=OFF

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

您是否(重新)构建了CRT动态链接的所有内容?是的,我删除了整个构建文件夹,并进行了干净的重建-没有任何更改您是否确定每个库和exe都是使用/MD(或调试中的/MDd)构建的,即与CRT的动态链接?您的错误消息似乎表明静态链接和动态链接不匹配…问题是libprotobuf与
/MT
链接,因此我也必须使用
/MD
进行编译,以便将其链接到staticallyOkay,因此我将我的DLL与另一个使用
/MD
编译的库链接,这似乎是导致问题的原因。有没有办法链接两个库,一个是用
/MD
编译的,另一个是用
/MT
编译的?