protobuf版本常见问题

protobuf版本常见问题

许多软件都依赖 google 的 protobuf,我们很有可能在安装多个软件时重复安装了多个版本的 protobuf,它们之间很可能出现冲突并导致在后续的工作中出现版本不匹配之类的错误。本文将讨论笔者在使用 protobuf 中遇到的一些问题,以及最终的解决方案,持续更新。读者遇到其他的版本问题的报错也欢迎留言讨论。

protobuf的安装方式

  1. Linux系统级安装

    sudo apt-get install libprotobuf-dev protobuf-compiler  #Linux系统级的安装
    
  2. 通过python2安装

    sudo pip install google protocol  #python2.7版本的安装
    
  3. 通过python3安装

    sudo pip3 install google protocol  #python3.5版本的安装
    
  4. 通过anaconda安装

    conda install protobuf  #anaconda版本的安装
    

查看系统中已有的protobuf版本

  • 查看哪些路径下安装了protobuf

    whereis protoc
    
  • 查看当前默认的protobuf

    which protoc 
    
  • 查看当前默认的protobuf的版本

    protoc --version
    
  • 查看当前默认的系统级protobuf版本

    sudo protoc --version
    

错误一:protobuf编译器版本与库版本不匹配

报错信息

这是笔者在构建 ncnn 时遇到的一个 CMake 报错,关键报错信息如下:

Protobuf compiler version 3.13.0 doesn't match library version 3.18.0

即protobuf编译器版本与库版本不匹配。

解决方法

通过查看系统中的protobuf版本和当前的版本,发现确实存在不匹配现象,修改 PATH 环境变量后解决。

先查看现有的protoc路径

$ whereis protoc
protoc: /usr/local/bin/protoc /home/song/anaconda3/envs/JJ_env/bin/protoc

发现有 conda 环境下的和系统中的两个,分别查看它们的版本:

$ /home/song/anaconda3/envs/JJ_env/bin/protoc --version
libprotoc 3.13.0
$ protoc --version
libprotoc 3.13.0

确实是 3.13 和 3.18,与报错信息对应上了,再看一下系统中的protobuf版本和当前默认的版本:

$ protoc --version
libprotoc 3.13.0
$ sudo protoc --version
libprotoc 3.18.0

恰好也是系统中的是 3.18 版本,当前默认的是 3.13 版本,到这里已经基本破案了。

我们再来看一下环境变量 PATH 加以验证:

$ echo $PATH
/home/song/anaconda3/envs/JJ_env/bin:/usr/local/cuda/bin:/home/song/anaconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/song/mbin:/usr/local/ffmpeg/bin

果然,conda 环境的搜索顺序比系统的搜索顺序靠前,故现在默认的是 conda 环境中的版本,我们将系统的protoc搜索路径放在前面:

$ export PATH=/usr/local/bin/:$PATH
$ protoc --version
libprotoc 3.18.0

已经匹配上了,再次进行 CMake 构建,顺利通过。

Ref:

https://blog.csdn.net/m0_38082419/article/details/80117132

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

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

相关文章

CMake常用命令整理

CMake常用命令整理 转自:https://zhuanlan.zhihu.com/p/315768216 CMake 是什么我就不用再多说什么了,相信大家都有接触才会看一篇文章。对于不太熟悉的开发人员可以把这篇文章当个查找手册。 1.CMake语法 1.1 指定cmake的最小版本 cmake_minimum_r…

CVE-2021-41773 CVE-2021-42013 Apache HTTPd最新RCE漏洞复现 目录穿越漏洞

给个关注?宝儿! 给个关注?宝儿! 给个关注?宝儿! CVE-2021-41773漏洞描述: Apache HTTPd是Apache基金会开源的一款流行的HTTP服务器。2021年10月8日Apache HTTPd官方发布安全更新,披…

SSRF,以weblogic为案例

给个关注?宝儿! 给个关注?宝儿! 给个关注?宝儿! 复习一下ssrf的原理及危害,并且以weblog的ssrf漏洞为案例 漏洞原理 SSRF(Server-side Request Forge, 服务端请求伪造) 通常用于控制web进而…

C++11 右值引用、移动语义、完美转发、万能引用

C11 右值引用、移动语义、完美转发、引用折叠、万能引用 转自:http://c.biancheng.net/ C中的左值和右值 右值引用可以从字面意思上理解,指的是以引用传递(而非值传递)的方式使用 C 右值。关于 C 引用,已经在《C引用…

C++11 std::function, std::bind, std::ref, std::cref

C11 std::function, std::bind, std::ref, std::cref 转自&#xff1a;http://www.jellythink.com/ std::function 看看这段代码 先来看看下面这两行代码&#xff1a; std::function<void(EventKeyboard::KeyCode, Event*)> onKeyPressed; std::function<void(Ev…

Java安全(一) : java类 | 反射

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 1.java基础 Java平台共分为三个主要版本Java SE&#xff08;Java Platform, Standard Edition&#xff0c;Java平台标准版&#xff09;、Java EE&#xff0…

LeetCode-287 寻找重复数 二分法

LeetCode-287 寻找重复数 二分法 287. 寻找重复数 给定一个包含 n 1 个整数的数组 nums &#xff0c;其数字都在 1 到 n 之间&#xff08;包括 1 和 n&#xff09;&#xff0c;可知至少存在一个重复的整数。 假设 nums 只有 一个重复的整数 &#xff0c;找出 这个重复的数 。…

对某公司一次弱口令到存储型xss挖掘

转自我的奇安信攻防社区文章:https://forum.butian.net/share/885 免责声明: 渗透过程为授权测试,所有漏洞均以提交相关平台,博客目的只为分享挖掘思路和知识传播** 涉及知识: xss注入及xss注入绕过 挖掘过程: 某次针对某目标信息搜集无意发现某工程公司的项目招标平台 …

C++11新特性选讲 语言部分 侯捷

C11新特性选讲 语言部分 侯捷 本课程分为两个部分&#xff1a;语言的部分和标准库的部分。只谈新特性&#xff0c;并且是选讲。 本文为语言部分笔记。 语言 Variadic Templatesmove semanticsautoRange-based for loopInitializer listLambdas… 标准库 type_traitsunodered…

java安全(二):JDBC|sql注入|预编译

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 1 JDBC基础 JDBC(Java Database Connectivity)是Java提供对数据库进行连接、操作的标准API。Java自身并不会去实现对数据库的连接、查询、更新等操作而是通…

java安全(三)RMI

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 1.RMI 是什么 RMI(Remote Method Invocation)即Java远程方法调用&#xff0c;RMI用于构建分布式应用程序&#xff0c;RMI实现了Java程序之间跨JVM的远程通信…

LeetCode-726 原子的数量 递归

LeetCode-726 原子的数量 递归 题目链接&#xff1a;LeetCode-726 原子的数量 给你一个字符串化学式 formula &#xff0c;返回 每种原子的数量 。 原子总是以一个大写字母开始&#xff0c;接着跟随 0 个或任意个小写字母&#xff0c;表示原子的名字。 如果数量大于 1&#xf…

java安全(四) JNDI

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 1.JNDI JNDI(Java Naming and Directory Interface)是Java提供的Java 命名和目录接口。通过调用JNDI的API应用程序可以定位资源和其他程序对象。JNDI是Java…

二叉树的层序遍历和前中后序遍历代码 迭代/递归

前中后序遍历&#xff08;DFS&#xff09; 首先我们要明确前中后序遍历的顺序&#xff1a; 前序&#xff1a;中左右中序&#xff1a;左中右后序&#xff1a;左右中 前中后序遍历的递归代码和迭代代码分别有各自的框架&#xff0c;然后根据遍历顺序调整记录元素的位置即可。 …

java安全(五)java反序列化

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 1. 序列化 在调用RMI时,发现接收发送数据都是反序列化数据. 例如JSON和XML等语言,在网络上传递信息,都会用到一些格式化数据,大多数处理方法中&#xff0c…

git merge和rebase的区别与选择

git merge和rebase的区别与选择 转自&#xff1a;https://github.com/geeeeeeeeek/git-recipes/wiki/5.1-%E4%BB%A3%E7%A0%81%E5%90%88%E5%B9%B6%EF%BC%9AMerge%E3%80%81Rebase-%E7%9A%84%E9%80%89%E6%8B%A9#merge BY 童仲毅&#xff08;geeeeeeeeekgithub&#xff09; 这是一篇…

java安全(六)java反序列化2,ysoserial调试

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; ysoserial 下载地址&#xff1a;https://github.com/angelwhu/ysoserial ysoserial可以让⽤户根据⾃⼰选择的利⽤链&#xff0c;⽣成反序列化利⽤数据&…

C++面试常见问题一

C面试常见问题一 转自&#xff1a;https://oldpan.me/archives/c-interview-answer-1 原作者&#xff1a;[oldpan][https://oldpan.me/] 前言 这里收集市面上所有的关于算法和开发岗最容易遇到的关于C方面的问题&#xff0c;问题信息来自互联网以及牛客网的C面试题目汇总。答题…

java安全(七) 反序列化3 CC利用链 TransformedMap版

给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 给个关注&#xff1f;宝儿&#xff01; 目录图解代码demo涉及的接口与类&#xff1a;TransformedMapTransformerConstantTransformerInvokerTransformerChainedTransformerdome理解总结&#xff1a…

C++编译时多态和运行时多态

C编译时多态和运行时多态 作者&#xff1a;melonstreet 出处&#xff1a;https://www.cnblogs.com/QG-whz/p/5132745.html 本文版权归作者和博客园共有&#xff0c;欢迎转载&#xff0c;但未经作者同意必须保留此段声明&#xff0c;且在文章页面明显位置给出原文连接&#xff0…