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

CMake设置MSVC工程MT/MTd/MD/MDd 搞懂CMake设置MT/MD的来龙去脉~ 阅读详情

本文记录如何生成以动态链接(MD/MDd)方式链接到运行库的C++版protobuf。
已上传完整的解决方案、生成的lib、exe等全部文件。详见:https://download.youkuaiyun.com/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 参考资料

Windows C++项目集成libevent:从源码编译到项目配置全攻略 事件驱动编程是现代高性能网络应用的核心范式,它通过非阻塞I/O和事件循环机制,实现高并发连接处理。其原理在于操作系统提供的I/O多路复用接口(如select、epoll、IOCP),允许单个线程监控多个文件描述符的状态变化,从而避免为每个连接创建线程的开销。这一技术价值在于显著提升服务器程序的资源利用率和吞吐量,尤其适用于Web服务器、实时通信、游戏后端等场景。在Windows平台上,许多开发者选择集成成熟的跨平台事件库libevent来构建此类应用。然而,Windows环境的独特性和Visual Stud 阅读详情

相关推荐

VC++即时通讯项目实战:从MFC界面到Socket网络编程全解析

网络编程是计算机通信的基础,其核心在于实现不同设备间的数据交换。TCP/IP协议栈作为互联网的基石,通过Socket接口为应用程序提供了可靠的端到端通信能力。在Windows平台下,Winsock库是实现网络通信的关键技术,它封装了底层协议细节,让开发者能够专注于业务逻辑。多线程编程则是提升程序并发性能的重要手段,尤其在需要同时处理多个网络连接或保持用户界面响应的场景中至关重要。通过结合MFC框架的消息驱动机制,可以构建出既稳定又交互流畅的桌面应用程序。本文以即时通讯软件这一经典应用场景为例,深入探讨了如何

weixin_30443813的博客 373

ProtoBuf?

何为 ProtoBuf 我们先来看看官方文档给出的定义和描述: protocol buffers 是一种语言无关、平台无关、可扩展的序列化结构数据的方法,它可用于(数据)通信协议、数据存储等。 Protocol Buffers 是一种灵活,高效,自动化机制的结构数据序列化方法-可类比 XML,但是比 XML 更小(3 ~ 10倍)、更快(20 ~ 100倍)、更为简单。 你可以定义数据的结构,然后使用特殊生成的源代码轻松的在各种数据流中使用各种语言进行编写和读取结构数据。你甚至可以更新数据结构,而

a88668a的博客 277

vs2015编译openssl静态库

vs2015编译的openssl-1.0.2h x64的静态库,里面包含头文件,dll 文件及lib文件.用来解决VS2010下可以正常用,而在vs2015下就报错,需要替换调头文件及lib文件就可以正常。

【Protoc】VS2019 (VS平台) 使用 CMake 编译安装、使用 Protobuf 库

背景:工作中需要使用到 protobuf,看了一些教程,感觉都不是很适合,便自己总结一些 开发环境: Win 10 VS2019 CMake 3.24.2 Protobuf 3.21.12 (Protoc 版本必须于 Protobuf 版本一致) MinGW 版本的编译在之后有空再研究。 https://stackoverflow.com/questions/9243816/how-to...

橘嘉禾 1737

动态链接(MD/MDd)方式链接到运行库的C++版protobuf

在Win7用VS2015编译,目标平台x64,用MD/MDd方式链接运行库。 按官网文档生成的lib默认链接方式为MT/MTd,此上传文件以MD/MDd方式链接。文件包含完整的vs2015解决方案、最终编译成果lib、exe等全部文件可以直接使用。 如果想自已编译,可双击protobuf-master/cmake/build/solution/protobuf.sln文件打开解决方案,直接生成即可。编译结果存放在solution目录下Debug和Release。详见:https://blog.youkuaiyun.com/codeaftercode/article/details/113573653

Linux USB设备命名规则

有一个USB设备,接到了Linux系统的终端的某个插口上,那么怎么找到这个设备对应设备路径呢?这个USB设备虚拟了多个功能(三个串口和一个网卡), 如何找到对应操作路径呢?

weixin_43132521的博客 1699

C++ debug时提示 已触发了一个断点

内存越界引起的 C++ debug时提示 已触发了一个断点的错误

GeorgeDiDi的博客 2万+

Android 音频源码分析——音量调节流程

源码分析基于android9.0 一、声音类型 对于大多数手机用户来说,操作手机音量按键可以看到,声音类型分为四种:媒体、铃声、闹钟、通话,但是其系统内部则分为十几种类型。 声⾳类型用来区分不同播放用途及播放设备,包含11中类型 定义在 frameworks/base/media/java/android/media/AudioSystem.java中 /** Used to identify the default audio stream volume */ public static final in

奋斗的菜鸟ing 3822

VS2015编译Protobuf库以及使用

第一次使用protobuf,中间碰到了不少坑,记录下来,也希望能帮到别人一、编译。 在编译这里就碰到了一个坑,我下载的最新版的protobuf源码里面,并没有包含vsprojects文件夹,最新版改用CMake编译了,我折腾了半天也没编译成功。 看了网上的文章的发表时间,猜测应该是老版本的源码里面有vs的工程,于是下载了2.6.1版本的源码,果然有vs工程。于是直接用VS2015

atceedsun的专栏 9727

【STM32开源实战】基于STM32的智能输液监控系统设计与实现

本文详细介绍了基于STM32F103C8T6主控芯片的智能输液监控系统设计与实现。该系统通过光学液位传感器、温度传感器和红外滴速检测模块实时监测输液状态,利用步进电机自动调节滴速,并通过蓝牙实现数据远程传输,为医院提供了一套低成本、高可靠性的智能输液解决方案。

h6i7j8的博客 761

南京邮电大学《数学实验》模块二(函数的迭代)参考答案

【代码】南京邮电大学《数学实验》模块二(函数的迭代)参考答案。

qq_1293730064的博客 3万+

VS运行时库配置区别(静态链接和动态链接区别)

检查当前配置:在 VS 中,右键项目 →属性→配置属性→C/C++→代码生成→运行库,即可查看或修改此选项。如何选择对于大型项目或生成 DLL的项目,默认的/MDd是更标准、更安全的选择。如果你需要生成一个独立的、不依赖任何 VC 运行库的.exe文件,可以考虑使用/MTd。遇到 LNK2038 错误时:这意味着统一性被破坏。你需要找到项目中配置不一致的模块,将其统一修改。如果你在编译某个开源库时遇到此错误,通常可以在其 CMake 配置中找到类似或的选项来匹配你的主项目配置。

萧戈的专栏 491

get_seed协议

【代码】get_seed协议。

a545958498的博客 912

C++ OpenCV开发资源包:从环境配置到核心API实战指南

计算机视觉作为人工智能的重要分支,其核心在于通过算法处理和分析图像与视频数据。OpenCV作为开源计算机视觉库,提供了丰富的图像处理、特征检测和机器学习功能,是实现视觉应用的基础工具。其跨平台特性和C++接口使其在性能要求高的工业场景中广泛应用。然而,OpenCV的配置复杂性和API学习曲线常成为开发障碍。本文聚焦于构建一个实用的C++ OpenCV开发资源包,通过分层架构设计,涵盖环境配置、核心API实战和常见问题排查。资源包特别针对高频搜索的“安装opencv”和“microsoft visual c+

diandingyin9417的博客 368

GAN管CGH40010F设计宽带Doherty功放:如何用ADS搞定输入匹配、合路网络与功分器?

本文详细介绍了基于CGH40010F GaN晶体管的宽带Doherty功放设计流程,重点讲解在ADS平台中实现输入匹配网络、合路网络与功分器的关键技术。通过寄生参数补偿、渐变微带线设计和复合补偿结构等方法,解决了宽带化设计中的核心挑战,最终实现1.7-2.6GHz频段内72%的峰值效率和52%的回退效率。

weixin_42614269的博客 473

华为OD机试 - 直捣黄龙 - 广度优先搜索BFS(Python/JS/C/C++ 新系统 200分)

从样例 1 可知:5 / 2,2 -> 输出 2 9如果按“移动步数”计算应该是 8,但题目输出是 9,说明这里的“路径长度”统计的是 路径上经过的节点数量。最短路径条数:ways[end]路径长度:dist[end] + 1。

学Java,找哪吒 125

VS2015 + curl+ MT(MD)编译

环境:win7+vs2015+curl7.52.1+openssl-1.0.1p 下面先编译openssl,在编译curl. 编译openssl 工具: ActivePerl,官网下载链接:http://www.activestate.com/activeperl/downloads openssl源码,下载链接:https://www.openssl.org/source/,我下的老版本,高的不...

Ponywool的博客 1050

【DeepSeek-R1 】分词系统架构解析

DeepSeek-R1 分词系统解析 DeepSeek-R1 采用 SentencePiece Unigram 算法,通过统计语言模型实现高效子词分词。其核心优势包括: 算法对比:相比 BPE/WordPiece,Unigram 基于概率模型,支持多语言,自动回退字符级处理。 特性优化:智能空格处理、数字分桶、多语言统一支持,并采用前缀树索引和 SIMD 并行加速,编码速度达 12,458 tok/s。

赶紧的博客 429

Visual Studio 2015+cmake编译安装MD版的DCMTK

https://blog.youkuaiyun.com/chaoenhu/article/details/78200274 一、编译环境 本文的编译机器是Windows10 64位系统,使用VS2015和cmake3.7.2编译DCMTK源码为64位包(运行时库为MD或MDd)。 注(引用): /MT和/MTd表示采用多线程CRT库的静态lib版本。该选项会在编译时将运行时库以静态lib的形式完全嵌入。该...

Sayesan的专栏 976

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

VS中的 MD/MT设置

VS系列工具作为目前微软主打的集成开发环境,在历经了近20多年的发展后,到如今已经可以说是Windows平台上各种IDE环境中的翘楚了。很多别的开发工具已经难望其项背了,如今VS2010也已经面市很长时间了,但是因为笔者囊中羞涩,无法升级硬件,所以也没有办法去进行那个180天的VS2010体验之旅了,实为憾事。当然这是别话,现在我主要使用的依然是VS2008,用它来开发我想要...

weixin_34111819的博客 569

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

openssl源码编译

文章目录源码下载编译Windows(参考NOTES-WINDOWS.md)Linux 源码下载 git clone git@github.com:openssl/openssl.git 编译 Windows(参考NOTES-WINDOWS.md) 安装 perl 我安装了 Strawberry Perl,由于官网服务器在海外,下载较慢,此处提供百度网盘链接 提取码:mv58 (吐槽一句,优快云资源真ex)。 安装 NASM, NASM 的下载安装很快。 系统环境变量PATH中添加 na

guo_lei_lamant的博客 830

vs2015 下编译 OpenSSL(补充)

前人已经总结了,借鉴: https://blog.youkuaiyun.com/liang19890820/article/details/51658574 https://www.cnblogs.com/zc2014blog/archive/2017/08/02/7272355.html 我的是vs2015 x64,但是是安装在d盘。所以在进行nmake -f ms\ntdll.mak这一步时,提示了...

查尔斯先生的博客专栏 875

Windows下使用VS2015编译openssl库

目标:编译vs环境下openssl库 工具: 1. 编译环境win10+vs2015专业版 2. ActivePerl工具,官网下载链接:http://www.activestate.com/activeperl/downloads 3. openssl源码,下载链接:https://www.openssl.org/source/,选择2016-May-03 13:57:13 opens...

Zen 501

用VS2015编译OpenSSL

一、Openssl简介 OpenSSL 是一个安全套接字层密码库,囊括主要的密码算法、常用的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。 OpenSSL被曝出现严重安全漏洞后,发现多数通过SSL协议加密的网站使用名为OpenSSL的开源软件包。OpenSSL漏洞不仅影响以https开头的网站,黑客还可利用此漏洞直接对个人电脑发起“心脏出血”(Heartbleed)...

traceme2011的专栏 3784

windows下vs2015编译librdkafka(64位)

librdkafka下载网址: https://github.com/edenhill/librdkafka ActivePerl下载网址: https://www.activestate.com/products/activeperl/downloads/ openssl下载网址: https://pan.baidu.com/s/1jqIdBiA5CUBFHmJIpkXL6A win...

jiao_mrswang的博客 3351

【转】iOS编译OpenSSL静态库(使用脚本自动编译)

原文网址:https://www.jianshu.com/p/651513cab181 本篇文章为大家推荐两个脚本,用来iOS系统下编译OpenSSL通用库,如果想了解编译具体过程,请参看《iOS编译OpenSSL静态库》 脚本一 下载:https://github.com/x2on/OpenSSL-for-iPhone 说明: 该脚本带有demo,同学们可以研究下源码,了解加密解密的过程...

weixin_34081595的博客 616
上一篇: 银河麒麟KylinOS-4.0.2-sp2-desktop安装QtSerialPort失败[private/qringbuffer_p.h:没有那个文件或目录]
codeaftercode
博客等级 码龄11年 666粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值