[C++]VS2015用动态链接(MD/MDd)方式编译protobuf

本文记录如何生成以动态链接(MD/MDd)方式链接到运行库的C++版protobuf。
已上传完整的解决方案、生成的lib、exe等全部文件。详见:https://download.csdn.net/download/codeaftercode/14999041

0.准备工具

需安装有Visual Studio、cmake
打开命令行,输入cmake,如果提示’cmake’不是内部或外部命令,则未安装cmake或未将cmake添加到环境变量。下载安装一个就好了。
在这里插入图片描述
在这里插入图片描述

1 下载源码

GitHub下载源码。

2 编译

可以参考官方版编译指南:README
编译出来文件的运行库是MT/MTd,但在我的项目里需要用MD/MDd。不知道在cmake命令行中如何指定运行库,所以我决定先用cmake生成VS2015解决方案,再用VS2015设置运行库并编译。

2.1 建立文件夹

解压源码,打开源码文件夹protobuf-master,新建install文件夹。
新建install文件夹
打开cmake目录,新建build文件夹;打开build,新建solution文件夹。
新建solution文件夹

2.2 生成解决方案

打开solution目录,按住Shift点击鼠标右键,在右键菜单中选择“在此处打开命令窗口”。
在这里插入图片描述
输入以下命令生成解决方案:

cmake -G "Visual Studio 14 2015 Win64" -Dprotobuf_BUILD_TESTS=OFF -DCMAKE_INSTALL_PREFIX=../../../../install ../..

上述命令中,"Visual Studio 14 2015"表示使用VS2015。Win64表示目标平台为64位,如果要生成32位解决方案,可删除该参数。如果使用其他版本的VS,可先用cmake -h查询。

在这里插入图片描述

-Dprotobuf_BUILD_TESTS=OFF表示取消其中的unit test模块。因为其依赖另一个开源库,并不包含在protobuf源码中,需另行下载。作用顾名思义大概是unit tests,好像没什么用,所以直接取消了(如果不取消则必须先去下载依赖库,否则会报错)。

在命令行执行上述命令,注意是在solution目录下执行,结果如下:
在这里插入图片描述
没有报错。可以看到solution目录下生成了很多文件,其中有extract_includes.bat用来生成引用目录,protobuf.sln是VS解决方案入口。
在这里插入图片描述
双击extract_includes.bat文件执行批处理,生成include目录备用。
用VS2015打开protobuf.sln文件,准备编译。

2.3 编译Debug版本

  • VS2015设置为Debug模式,选中libprotobuf、libprotobuf-lite、libprotoc、protoc四个项目,右键->属性,打开属性页。

在这里插入图片描述

  • 配置属性-> C/C++ -> 代码生成:运行库默认为MTd,修改为MDd

在这里插入图片描述

  • 选中ALL_BUILD项目,右键->生成。

编译成功后,打开solution/Debug文件夹查看结果。其中libprotobufd.lib即protobuf的静态库(Debug版)
在这里插入图片描述

2.4 编译Release版本

  • VS2015设置为Release模式,选中libprotobuf、libprotobuf-lite、libprotoc、protoc四个项目,右键->属性,打开属性页。
  • 配置属性-> C/C++ -> 代码生成:运行库默认为MT,修改为MD。
  • 选中ALL_BUILD项目,右键->生成。

编译成功后,打开solution/Release文件夹查看结果。其中libprotobuf.lib即protobuf的静态库(Release版)

2.5 编译结束

Debug/Release目录下的protoc.exe文件,用于将.proto文件生成.pb.h和.pb.cc文件。
libprotobufd.lib/libprotobuf.lib是protobuf的静态库,如果在其他项目中需要用protobuf,则应将该文件添加到其依赖库中,同时添加包含目录solution/include。

3 参考资料

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值