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.pswp.cn/news/532559.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/532559.shtml
英文地址,請注明出處:http://en.pswp.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…