MFC程序中使用protobuf注意点

我的环境window7 + VS2017

1、不使用预编译头!

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

MFC程序中使用protobuf注意点

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

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

MFC程序中使用protobuf注意点

MFC程序中使用protobuf注意点

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

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

MFC程序中使用protobuf注意点

MFC程序中使用protobuf注意点

 

MFC程序中使用protobuf注意点

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

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

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