MFC程序中使用protobuf注意点

在Windows7+VS2017环境下,MFC程序使用protobuf时,需注意不使用预编译头。编译protobuf库时,可以选择32位或64位,推荐静态库。对于protobuf_MSVC_STATIC_RUNTIME选项,勾选时需处理uafxcwd.lib和LIBCMTD.lib冲突,否则可能导致调试时的内存泄漏问题。静态库中调用google::protobuf::ShutdownProtobufLibrary()可避免内存泄漏。

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

我的环境window7 + VS2017

1、不使用预编译头!

2、编译库的时候,可以选择编译成32位版本或是64位版本,我选择编译的64位版本。

(1)protobuf_BUILD_SHARED_LIBS选上会编译成动态库,不勾选会编译成静态库,两种都是可以的。

(2)protobuf_MSVC_STATIC_RUNTIME勾选上的话,需对VS2017进行如下设置:

 如果产生uafxcwd.lib和LIBCMTD.lib冲突的错误的话,需要:先忽略特定库(注意顺序):uafxcwd.lib;LIBCMTD.lib;再添加附加依赖项(注意添加顺序):uafxcwd.lib;LIBCMTD.lib;我添加的是debug版本!

 (3)protobuf_MSVC_STATIC_RUNTIME如果不勾选上的话,对VS2017进行如下设置:

 

以上在mfc程序中调用都是没问题的,都已经测试过了。 

我推荐编译成静态库使用。测试发现动态库时,什么操作不执行,只包含了头文件,在程序退出的时,此间没有调用protobuf中的任何一个函数,就有内存泄漏。

静态库也有这个问题,但是在程序退出时调用protobuf中的google::protobuf::ShutdownProtobufLibrary();函数就没有内存泄漏了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小米的修行之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值