当前位置: 首页 > news >正文

Protobuf,gmock,gtest在windows10上的编译与安装

首先要说的是,这种编译与安装不是必须的,用户可以自己下载protoc的二进制文件直接使用。因为开发和调试的原因,我经常反复需要编译不同版本的protobuf,例如NCNN用的protobuf3.4.0。因为重复的过程中自己也没有详细记录过,所以这里记录一下备忘。

(I)第一步,下载gmock。

https://codeload.github.com/google/googletest/tar.gz/refs/tags/release-1.11.0https://codeload.github.com/google/googletest/tar.gz/refs/tags/release-1.11.0

编译安装 gmock (现在并入到了gtest)不是必须的,后续protobuf只要求路径正确即可。

不过我这里还是先编译一下,非常简单,用cmake配置后编译即可,如下, 

 注意,在Configure时候,cmake会弹出对话框,此时可以选择win32还是x64,我这里选择的是x64

 (II)第二步,下载编译安装 protobuf-3.4.0。

原来下载编译protobuf的时候,直接把gmock下载到protobuf下面的子文件夹就可以了,可惜的是,gmock现在被google并入到gtest中,所以如果是从上面这个链接下载下来的话,地址可能要变。

我解压后的gmock地址在这里:D:\vsAI\googletest1110\googlemock

我的protobuf目录在这里:D:\vsAI\protobuf340

直接配置的话,会生成错误:cannot find gmock directory.

 解决办法是写入正确的地址。修改文件<D:\vsAI\protobuf340\cmake\tests.cmake> 中的第1,16,25等行。不过这比较麻烦,我的解决办法是直接

(1)把文件夹

D:\vsAI\googletest1110\googlemock

拷贝到

D:\vsAI\protobuf340\gmock

(2)把文件夹

D:\vsAI\googletest1110\googletest

拷贝到

D:\vsAI\protobuf340\gmock\gtest

然后再配置cmake-gui,就一切OK了。最后Open Project,用vs2017编译,一切顺利,如下,

 后话:编译老版本的probobuf,最主要的是设置对googlemock和googletest的路径。

Probobuf3.9.1 + VS2019

当编译protobuf3.9.1时,很简单,直接把googletest解压到thirty_party目录下即可。如下图,

注意事项

我的zlib是自己编译的,所以在用cmake-gui配置时需要填入zconf.h和zlib.h的路径,
D:\vsNCNN\zlib1211\dev\zconf.h
D:\vsNCNN\zlib1211\zlib.h,

cmake-gui的配置如下,

出现的问题

当在path环境变量中设置了其他版本的protoc.exe的路径时,编译很容易出现冲突,比如这样的错误,

https://github.com/tensorflow/tensorflow/issues/29978

protobuf/arena.cc:53:13: error: use of undeclared identifier 'LifecycleId'
std::atomic<LifecycleId> ArenaImpl::lifecycle_id_generator_;

解决办法就是在环境变量中删除这些路径,删除cmake-gui中的cache,重启cmake-gui后再配置编译。 

相关文章:

  • CMD闪退的问题及报错“点的大小应介于5和72之间”
  • 常用git 指令
  • 常用的anaconda(conda)命令
  • pcl_viewer的使用与viewer窗口编程
  • OpenVINO+Yolov5+Windows10的CPU部署
  • PCD(点云数据)文件格式
  • Labelme在windows下的编译与vscode开发执行
  • Tools_vcpkg包管理工具在VS2019项目开发中的使用
  • Windows通过winscp登陆Ubuntu18.04
  • Ubuntu18.04安装RTL8125/RTL8168等网卡驱动程序
  • Ubuntu如何卸载cuda driver
  • Ubuntu20.04安装Cuda driver + toolkit + cudnn
  • ROS安装时:找不到有效的OpenPGP数据
  • ROS报错:-- Could NOT find PY_em (missing: PY_EM)
  • SLAM算法r3live试运行
  • Angularjs之国际化
  • CSS实用技巧干货
  • ES6 学习笔记(一)let,const和解构赋值
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • Js基础知识(一) - 变量
  • Meteor的表单提交:Form
  • Twitter赢在开放,三年创造奇迹
  • web标准化(下)
  • 如何合理的规划jvm性能调优
  • 树莓派 - 使用须知
  • 网页视频流m3u8/ts视频下载
  • 小试R空间处理新库sf
  • 赢得Docker挑战最佳实践
  • nb
  • Python 之网络式编程
  • 阿里云移动端播放器高级功能介绍
  • #pragma预处理命令
  • #Z0458. 树的中心2
  • ()、[]、{}、(())、[[]]命令替换
  • (03)光刻——半导体电路的绘制
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (ZT)一个美国文科博士的YardLife
  • (笔试题)合法字符串
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (原創) 如何解决make kernel时『clock skew detected』的warning? (OS) (Linux)
  • (转载)VS2010/MFC编程入门之三十四(菜单:VS2010菜单资源详解)
  • .CSS-hover 的解释
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .NET Core跨平台微服务学习资源
  • .net core使用ef 6
  • .Net8 Blazor 尝鲜
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET开源项目介绍及资源推荐:数据持久层
  • .NET连接数据库方式
  • .net实现头像缩放截取功能 -----转载自accp教程网
  • /usr/lib/mysql/plugin权限_给数据库增加密码策略遇到的权限问题
  • @RequestBody的使用
  • @SuppressWarnings注解
  • [ solr入门 ] - 利用solrJ进行检索