Windows系统CMake+VS编译protobuf

news2024/9/21 4:29:32

目录

  • 一些名词
  • CMake构建VS工程
    • 下载protobuf源码
    • 下载CMake
    • 编译
    • QT中使用
  • 方案二失败:CMake+QT自带的Mingw编译
  • 参考链接

一些名词

lib
dll

lib库实际上分为两种,一种是静态链接lib库或者叫做静态lib库,另一种叫做动态链接库dll库的lib导入库或称为lib导入库。

x86
x64

x86 一般指 32 位的架构,x64指64位架构。

make
cmake
qmake

make工具,通过调用makefile文件中用户指定的命令来进行编译和链接。
cmake工具,cmake就可以更加简单的生成makefile文件给make。
qmake工具是Qt公司制造出来,用来生成Qt 专用makefile文件。

CMake构建VS工程

下载protobuf源码

https://github.com/protocolbuffers/protobuf
https://github.com/protocolbuffers/protobuf/releases
下载了protobuf-csharp-3.10.0.tar.gz
在这里插入图片描述
在这里插入图片描述

解压

下载CMake

本文选择最新版本的 3.28.0-rc4
打开CMake GUI
选择Browse Source为protobuf-3.10.0/cmake文件夹。
任意位置新建一个build文件夹,Browse Build选择构建输出的文件夹。

在这里插入图片描述

在这里插入图片描述

CMake界面运行configure

需要先设置使用的project
在这里插入图片描述
我选择了x64,根据自己的项目需求,选择x64 Win32 ARM之一

protobuf_BUILD_SHARED_LIBS:需选中该选项,则可编译动态链接库
protobuf_WITH_ZLIB:取消选中该选项
中间出错,取消选中ZLIB后正常。

CMake界面运行generate
img
<CMake Deprecation Warning at CMakeLists.txt:2 (cmake_minimum_required):
Compatibility with CMake < 3.5 will be removed from a future version of
CMake.
这是一个Warning,由于文件中没有限制CMake版本限制,不管也可以运行。

在这里插入图片描述
运行后,build中出现了工程文件

编译

打开protobuf.sln文件
上方选择x64 Release
在这里插入图片描述

在这里插入图片描述
右键,重新生成解决方案
等待时间

在Release文件夹生成了
在这里插入图片描述
也可以生成x64 Debug的
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

QT中使用

Release版本在QT使用方法
在这里插入图片描述
在这里插入图片描述
pro文件中加入这些
项目运行环境为 64bit Release

将dll文件拷贝至项目路径的Release文件夹下,可以正常运行。
代码可参考
史上最详细:Qt–编译配置Protobuf(windows10)

方案二失败:CMake+QT自带的Mingw编译

CMake config选择mingw makefile

参考链接

方案一
史上最详细:Qt–编译配置Protobuf(windows10)

windows下CMake编译Protobuf

在 VS2019 中编译/使用 Protobuf
(取消选中zlib很重要。生成没有参考教程,而是选择资源管理器生成)

方案二:失败
Windows下Qt+minGW+CMake+opencv配置–方法总结、文件分享与排错分享
使用MinGW
QT中如何使用protobuf,配图详解
MinGW
cmake配置Qt的protobuf环境时出现Error in configuration process, project files may be invalid解决办法

MinGW-w64 C/C++编译器下载和安装
(未参考,直接使用QT带的)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1212431.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

为什么程序员一定要写单元测试?

大家好&#xff0c;我是鱼皮&#xff0c;很多初学编程的同学都会认为 “程序员的工作只有开发新功能&#xff0c;功能做完了就完事儿”。但其实不然&#xff0c;保证程序的正常运行、提高程序的稳定性和质量也是程序员的核心工作。 之前给大家分享过企业项目的完整开发流程&am…

【numpy】数据类型

1、Numpy Python 的扩展库&#xff08;数学函数库&#xff09;&#xff0c;主要用于数组计算。 N维数组对象ndarray广播功能函数整合C/C/Fortran代码的工具线性代数、傅里叶变换、随机数生成等功能 通常与SciPy&#xff08;开源算法库和数学工具包&#xff09;和Matplotlib&a…

action3录制出来的LRF文件的正确打开方式

你会发现使用大疆的产品录制出来的视频会有两种格式&#xff1a;LRF和MP4 这个LRF文件是低分辨率、低码率的预览文件&#xff0c;非常适合预览。 这个文件可以直接通过修改文件后缀转化为.mp4格式

STM32速成笔记—SPI通信

&#x1f380; 文章作者&#xff1a;二土电子 &#x1f338; 关注公众号获取更多资料&#xff01; &#x1f438; 期待大家一起学习交流&#xff01; 文章目录 一、SPI简介二、SPI的四种工作方式三、STM32的SPI通信3.1 SPI内部结构分析3.2 SPI引脚 四、SPI通信程序设计4.1 S…

RSS订阅快速连接Notion

数环通让您可以通过不到几分钟的时间即可实现RSS订阅与Notion的对接与集成&#xff0c;从而高效实现工作流程自动化&#xff0c;降本增效&#xff01; 1.产品介绍 RSS订阅是数环通的内置应用&#xff0c;很多用户通过RSS订阅来收集自己在各大平台上看的内容&#xff0c;当RSS…

清晨早安问候祝福语精选,相互牵挂,祝福无价!

1、有一种祝福&#xff0c;时刻都在心里。无论相隔多远&#xff0c;都能温暖彼此的心灵。珍惜美丽相遇&#xff0c;珍藏这份情意。忙碌不是忘记&#xff0c;牵挂一直都在心里。送上一份心的祝福&#xff0c;书写一份心的牵挂&#xff0c;坦诚相待&#xff0c;温暖相伴&#xff…

XXX系统测试报告测试用例模板

XXX系统测试报告 编制&#xff1a; 2023-5-16 审核&#xff1a; 日期&#xff1a; 批准&#xff1a; 日期&#xff1a; 版本 修订时间 修订人 修订类型 修订章节 修订内容 *修订类型分为 A …

Spring Framework 核心容器详解:Core、Beans、Context 和 Expression Language 模块

Spring可能成为您的所有企业应用程序的一站式商店。但是&#xff0c;Spring是模块化的&#xff0c;允许您挑选适用于您的模块&#xff0c;而无需引入其他模块。下面的部分提供了Spring Framework中所有可用模块的详细信息。 Spring Framework提供了大约20个模块&#xff0c;可…

八大学习方法(金字塔模型、费曼学习法、布鲁姆学习模型)

在微博上看到博主发的&#xff0c;觉得总结很好&#xff0c;在此摘录&#xff1a;

JZ22:链表中倒数第k个结点

JZ22&#xff1a;链表中倒数第k个结点 题目描述&#xff1a; 输入一个链表&#xff0c;输出该链表中倒数第k个结点。 示例1 输入&#xff1a; 1,{1,2,3,4,5} 返回值&#xff1a; {5} 分析&#xff1a; 快慢指针思想&#xff1a; 需要两个指针&#xff0c;快指针fast&…

JS-项目实战-编辑单价单元格,可以点击单价单元格并且出现文本框,并自动选中输入框内部的文本

1、鼠标悬浮和离开事件.js //当页面加载完成后执行后面的匿名函数 window.onload function () {//get:获取 Element:元素 By:通过...方式//getElementById()根据id值获取某元素let fruitTbl document.getElementById("fruit_tbl");//table.rows:获取这个表格…

Nginx + RTMP + nginx-http-flv-module 环境搭建(CentOS 7)

文章目录 1. 引言2. 安装 Nginx3. 安装依赖库4. 下载编译 Nginx with RTMP 模块5. 配置 Nginx6. 启动 Nginx7. 推流测试8. 播放测试9. 拓展9.1 鉴权配置9.2 HTTPS 配置9.3 安全性配置 10. 小结 &#x1f389;Nginx RTMP nginx-http-flv-module 环境搭建&#xff08;CentOS 7&…

程序员进阶之路,该怎么走?

时代洪流&#xff0c;大浪淘沙。 逆水行舟&#xff0c;不进则退。 如果你游的速度慢于水流&#xff0c;要么你就是被剩下的沙子&#xff0c;要么就是即将被打翻的行舟了。。。 身为程序员时刻保持危机感&#xff0c;然后陷入内卷...... 卷又卷不赢&#xff0c;躺又躺不平。 …

如何使用代理IP访问YouTube?

相信大家对YouTube都很熟悉&#xff0c;但是由于网络安全管制&#xff0c;我们在看YouTube视频时经常遇到由于地理封锁或网络限制而受到限制的人吗&#xff1f;如果是这样&#xff0c;您一定听说过代理IP&#xff08;代理服务器&#xff09;以及它们如何帮助您绕过此类限制&…

计算机视觉:使用opencv实现车牌识别

1 引言 汽车车牌识别&#xff08;License Plate Recognition&#xff09;是一个日常生活中的普遍应用&#xff0c;特别是在智能交通系统中&#xff0c;汽车牌照识别发挥了巨大的作用。汽车牌照的自动识别技术是把处理图像的方法与计算机的软件技术相连接在一起&#xff0c;以准…

2022年06月 Scratch(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

一、单选题(共25题,每题2分,共50分) 第1题 广场中有声控喷泉,当声音的音量大于60的时候,喷泉就会喷出水,现在的音量为30,下列哪个选项可以让喷泉喷出水? A: B: C: D: 答案:B 当前声音的音量为30,需要将声音增加到60以上就可以让喷泉喷出水,选项A将声音…

Java中 ==、equals() 、equalsIgnoreCase() 和compareTo() 方法对比详解

目录 运算符 equals() 方法 equalsIgnoreCase() 方法 compareTo() 方法 对比总结 运算符 运算符是Java中用于比较两个操作数是否相等的运算符。它可以用于比较基本数据类型和对象类型。 1、对于基本数据类型&#xff1a; 比较的是两个操作数的值是否相等。如果两个操作数…

Oracle(17)Managing Roles

目录 一、基础知识 1、基础介绍 2、Predefined Roles 预定义的角色 3、各种角色的介绍 二、基础操作 1、创建角色 2、修改用户默认role 3、回收role 4、删除role 5、为角色授权 6、授予角色给用户 7、查看用户包含的角色&#xff1a; 8、查看角色所包含的权限 9、…

教育数字化助力打造个性化语言学习环境

2023年,我国教育数字化呈现高速发展态势,网络教育用户规模、在线教育市场规模、数字内容市场规模再创历史新高,数字校园建设普及率、教师数字技术素养等均高于全球平均水平。 在数字技术支撑下,新的语言学习方式也在逐渐普及。 语言学家克拉申(Stephen Kr-ashen)提出的二语习得…

hidl hwbinder和binder混合使用相关的joinThreadPool问题解答

背景&#xff1a; 今天一个学员在群里有个提问如下图&#xff0c;怎么有两个joinThread&#xff0c;会执行么&#xff1f;joinThread不是死循环等待数据吗&#xff1f; /frameworks/av/media/mediaserver/main_mediaserver.cpp 当开始看到这个时候确实也觉得最后的hw的join根本…