Caffe番外:Protobuf3.1.0 VS2013配置问题

本文档详细介绍了在Visual Studio 2013中配置Caffe时遇到的三个关键错误:1) LNK2038关于“RuntimeLibrary”的不匹配;2) LNK2005关于_heap_alloc的重复定义;3) LNK1112关于模块计算机类型的冲突。针对这些问题,提供了修改项目属性以选择静态多线程模式,忽略特定默认库,以及确保protobuf库与项目架构匹配的解决方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(main.obj 中)

LNK2038

解决方法:
项目属性——配置属性——C/C++-代码生成——运行库——选择多线程(MT)

简单地说,就是使用纯粹的static模式,这也是google-protobuf所推荐的。Dynamic模式同样可以支持,但VS默认的多线程调试MDD就像混合了static与dynamic一样,造成LNK2038。

LNK2038 Solution

问题说明参考博文问题2
详细解释参考这里

2. error LNK2005:_heap_alloc已经在libcmt.lib中定义

LNK2005

解决方法(Static版):
项目属性——配置属性——链接器——输入——忽略特定默认库:libcmt.lib

LNK2005 Solution

这其实同样是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位(如果你没有额外添加其他参数的话)。

X64

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值