1. error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(main.obj 中)
解决方法:
项目属性——配置属性——C/C++-代码生成——运行库——选择多线程(MT)
简单地说,就是使用纯粹的static模式,这也是google-protobuf所推荐的。Dynamic模式同样可以支持,但VS默认的多线程调试MDD就像混合了static与dynamic一样,造成LNK2038。
2. error LNK2005:_heap_alloc已经在libcmt.lib中定义
解决方法(Static版):
项目属性——配置属性——链接器——输入——忽略特定默认库:libcmt.lib
这其实同样是MT、MDD引起的麻烦,详细解释参考博文问题3。
3. error LNK1112: 模块计算机类型“x64”与目标计算机类型“X86”冲突
多发生在需要切换使用32/64位的Protobuf时,解决办法很简单:32位引入32位protobuf编译出的.lib,64位用64位的。
在Protobuf3.1.0-VS2013中,默认生成的protoc.exe貌似是64位的,这一点可以在配置管理器中看出来:各项目是X64而不是Win32,所以它生成的.lib也是供64位用的。而用官方cmake方法nmake出来的Debug/Release版本是默认32位(如果你没有额外添加其他参数的话)。