连接标准库失败
Failed to link with standard library
我正试图将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)
我已经尝试添加libcmt
和MSVCRT
到我的链接器依赖,没有成功。
似乎我的DLL根本无法与/MT
标志编译,无论链接libprotobuf
与否。我错过了什么?
在阅读了protobuf CMakeLists之后,我发现了以下解决方案:
-Dprotobuf_MSVC_STATIC_RUNTIME=OFF
必须传递给cmake命令,使protobuf使用/MD
而不是/MT
相关文章:
- 标准中是否有类似折叠的算法(或失败:提升)可用?
- C++标准是否保证失败的插入到关联容器中不会修改 rvalue-reference 参数?
- 什么时候标准::线程::连接会因no_such_process而失败
- 标准::元组成员逐个成员比较失败
- 标准::复制失败,"cannot seek vector iterator after end"
- C++ 标准::获取<variable>失败
- 标准::unordered_map:插入何时失败
- 重定向标准输出时调用 dup2 失败
- 有没有办法将模板的替换失败转换为布尔值(真/假)或标签(标准::true_type/标准::false_type)
- 为什么为我的对象类编译标准优先级队列失败
- 是否保证标准提取运算符>>在失败时不会更改参数?
- C 标准是否指定在某些情况下,编译应在错误中失败
- VS 链接器失败,标准::字符串方法出现"object already exists"错误
- 标准::映射的自定义分配器失败
- 重新打开后,将文件写入标准输出失败
- 使用标准输入流会导致编译失败
- 当标准测试失败时,用于查找点是否在2D多边形内的替代测试
- 自动标准最大输入的类型扣除失败 = 标准::最大值<int>;
- 连接标准库失败
- 向size_t添加const会导致编译失败,这是标准行为吗