1. 程式人生 > >一個簡單操作解決protobuf版本問題,複製貼上你會吧

一個簡單操作解決protobuf版本問題,複製貼上你會吧

  • 這個方法雖然簡單,但是我們有完美的利用anaconda的解決方案,能夠解決伺服器上大家版本衝突,你想要幾個環境就可以建立幾個完全不衝突的環境,算是一本萬利,教程在http://www.cnblogs.com/SweetBeens/p/8650460.html,推薦用這種方法。當然docker更好一些,但是老程式碼是沒有docker檔案的。
  • 從頭說起:

如何看你的需要安裝的版本呢,上圖:

注意看我的檔案的路徑,這就是caffe官網上的那句命令列出處:

for req in $(cat requirements.txt); do pip install $req; done

鑑於我用的是segnet作者自己改的python版本的caffe,所以這是我的目錄,你可以窮搜,然後自己挑一個看看需要安裝什麼。按理說照著我這個txt,不論我什麼版本的都該好使,但是沒準我的txt找的不對,或者protobuf不向後相容了,或者caffe找的anaconda的protobuf,版本有問題,總之我越來越想看有沒有caffe配置更詳細的官方原文doc,或者我應該看看linux from scrach。這種盲人摸象式解決問題損失了很多樂趣。

  •  我現在開始折騰我們實驗室的伺服器,裡面的protobuf版本比較高,所以我要用2.6.1的,我首先用下面連線的方法安裝了2.6.1:(你可以選擇跳過到最後開始解決,那是正題)

http://blog.csdn.net/whoamiyang/article/details/52947225

  • 以下是提示我的路經:
libtool: install: (cd /usr/local/lib && { ln -s -f libprotoc.so.9.0.1 libprotoc.so.9 || { rm -f libprotoc.so.9 && ln -s libprotoc.so.9.0
.1 libprotoc.so.9; }; }) libtool: install: (cd /usr/local/lib && { ln -s -f libprotoc.so.9.0.1 libprotoc.so || { rm -f libprotoc.so && ln -s libprotoc.so.9.0.1 libprotoc.so; }; }) libtool: install: /usr/bin/install -c .libs/libprotoc.lai /usr/local/lib/libprotoc.la libtool: install: /usr/bin/install -c .libs/libprotobuf-lite.a /usr/local/lib/libprotobuf-lite.a libtool: install: chmod
644 /usr/local/lib/libprotobuf-lite.a libtool: install: ranlib /usr/local/lib/libprotobuf-lite.a libtool: install: /usr/bin/install -c .libs/libprotobuf.a /usr/local/lib/libprotobuf.a libtool: install: chmod 644 /usr/local/lib/libprotobuf.a libtool: install: ranlib /usr/local/lib/libprotobuf.a libtool: install: /usr/bin/install -c .libs/libprotoc.a /usr/local/lib/libprotoc.a libtool: install: chmod 644 /usr/local/lib/libprotoc.a libtool: install: ranlib /usr/local/lib/libprotoc.a libtool: finish: PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin:/sbin" ldconfig -n /usr/local/lib ---------------------------------------------------------------------- Libraries have been installed in: /usr/local/lib If you ever happen to want to link against installed libraries in a given directory, LIBDIR, you must either use libtool, and specify the full pathname of the library, or use the `-LLIBDIR' flag during linking and do at least one of the following: - add LIBDIR to the `LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the `LD_RUN_PATH' environment variable during linking - use the `-Wl,-rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to `/etc/ld.so.conf' See any operating system documentation about shared libraries for more information, such as the ld(1) and ld.so(8) manual pages. ---------------------------------------------------------------------- /bin/mkdir -p '/usr/local/bin' /bin/bash ../libtool --mode=install /usr/bin/install -c protoc '/usr/local/bin' libtool: install: /usr/bin/install -c .libs/protoc /usr/local/bin/protoc /bin/mkdir -p '/usr/local/include'
/bin/mkdir -p '/usr/local/include/google/protobuf'
/usr/bin/install -c -m 644 google/protobuf/descriptor.proto '/usr/local/include/google/protobuf'
/bin/mkdir -p '/usr/local/include/google/protobuf/compiler'
/usr/bin/install -c -m 644 google/protobuf/compiler/plugin.proto '/usr/local/include/google/protobuf/compiler'
/bin/mkdir -p '/usr/local/include'
/bin/mkdir -p '/usr/local/include/google/protobuf/compiler/cpp'

但是依舊沒有改變版本,沒有覆蓋住。

  • 以下是我的protobuf現狀:
[email protected]:~# whereis protoc
protoc: /usr/bin/protoc /usr/bin/X11/protoc /usr/local/bin/protoc /usr/share/man/man1/protoc.1.gz
[email protected]:~# pip show protobuf
Name: protobuf
Version: 3.4.1
Summary: Protocol Buffers
Home-page: https://developers.google.com/protocol-buffers/
Author: [email protected]
Author-email: [email protected]
License: 3-Clause BSD License
Location: /root/anaconda2/lib/python2.7/site-packages
Requires: six, setuptools
You are using pip version 9.0.1, however version 9.0.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
[email protected]:~# which protoc
/root/anaconda2/bin/protoc
[email protected]:~# protoc --version
libprotoc 3.4.0
[email protected]:~# 

部落格一:http://blog.csdn.net/elysion122/article/details/64523339的說法只能改變使用sudo命令下的提取位置,而且我還不知道怎麼編我自己的路徑。

http://blog.csdn.net/whoamiyang/article/details/52947225我的安裝來源液體到了路徑,不過我懷疑其實我都沒有安裝上,由於我的版本比較新,所以我打算用pip把它解除安裝了,關鍵是我怎麼讓caffe聽我的話去找protobuf用

我懷疑我的caffe用的是電腦的protobuf,在我用sudo make all的時候提示我語言不通,因為我這時用的是2.5的protobuf,用的是部落格一的預設路徑Defaults secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin

當我用make all的時候提示我升級版本。如果我能夠知道我的caffe上哪裡找的protobuf就好了。

知乎上這個也許可用,前提是我找到了對的protobuf:

https://www.zhihu.com/question/58592005/answer/188884890

我用cmake出現了

incompatible with your Protocol Buffer headers.  Please update

這個錯誤

--   Release CXX flags :   -O3 -DNDEBUG -fPIC -Wall -Wno-sign-compare -Wno-uninitialized
--   Debug CXX flags   :   -g -fPIC -Wall -Wno-sign-compare -Wno-uninitialized
--   Build type        :   Release
-- 
--   BUILD_SHARED_LIBS :   ON
--   BUILD_python      :   ON
--   BUILD_matlab      :   OFF
--   BUILD_docs        :   ON
--   CPU_ONLY          :   OFF
-- 
-- Dependencies:
--   BLAS              :   Yes (Atlas)
--   Boost             :   Yes (ver. 1.54)
--   glog              :   Yes
--   gflags            :   Yes
--   protobuf          :   Yes (ver. 2.6.1)
--   lmdb              :   Yes (ver. 0.9.16)
--   Snappy            :   Yes (ver. 1.1.0)
--   LevelDB           :   Yes (ver. 1.15)
--   OpenCV            :   Yes (ver. 2.4.8)
--   CUDA              :   Yes (ver. 8.0)

以下是make all的錯誤:

CXX tools/upgrade_net_proto_text.cpp
CXX/LD -o .build_release/tools/upgrade_net_proto_text.bin
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::internal::WireFormatLite::WriteStringMaybeAliased(int, std::string const&, google::protobuf::io::CodedOutputStream*)'
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::io::CodedOutputStream::WriteStringWithSizeToArray(std::string const&, unsigned char*)'
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::internal::AssignDescriptors(std::string const&, google::protobuf::internal::MigrationSchema const*, google::protobuf::Message const* const*, unsigned int const*, google::protobuf::MessageFactory*, google::protobuf::Metadata*, google::protobuf::EnumDescriptor const**, google::protobuf::ServiceDescriptor const**)'
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::Message::GetTypeName() const'
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::MessageLite::SerializeToString(std::string*) const'
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::MessageFactory::InternalRegisterGeneratedFile(char const*, void (*)(std::string const&))'
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::Message::DebugString() const'
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::internal::OnShutdownDestroyString(std::string const*)'
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::internal::WireFormatLite::WriteBytesMaybeAliased(int, std::string const&, google::protobuf::io::CodedOutputStream*)'
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::MessageLite::ParseFromString(std::string const&)'
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::internal::NameOfEnum(google::protobuf::EnumDescriptor const*, int)'
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::internal::fixed_address_empty_string'
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::internal::WireFormatLite::WriteString(int, std::string const&, google::protobuf::io::CodedOutputStream*)'
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::internal::WireFormatLite::ReadBytes(google::protobuf::io::CodedInputStream*, std::string*)'
.build_release/lib/libcaffe.so: undefined reference to `google::protobuf::Message::InitializationErrorString() const'
collect2: error: ld returned 1 exit status
make: *** [.build_release/tools/upgrade_net_proto_text.bin] Error 1
[email protected]:/dev/LT/SegNet/caffe-segnet# 

 http://blog.csdn.net/xiexievv/article/details/47396725

折騰了全部的路徑也不管用。

開始解決

本教程適用於折騰半天還不管事,無奈之舉。以及不能解除安裝(與別人共用伺服器)

中心思想,找到系統認準的protoc,用你想要的版本替換他。

你需要

1.你需要的protobuf版本

2.該版本被你安裝在哪

3.你係統認準的protobuf版本在哪

4.告訴你的系統,去哪裡找lib

1安裝你需要的protobuf

這個沒什麼好說的,不過提醒你最好用prefix裝在你指定的目錄,.configure --help看看怎麼用prefix

./configure --prefix=/root/LT

2.找到你剛安裝的protobuf

進入他的lib資料夾:

比如我就不同尋常的裝到了LT資料夾裡:不走尋常路,記住這個protoc。

 3.找到你係統認定的protoc在哪

終端輸入:

你也可以用命令列,找到這個protoc,給他改個名字,比如protoc_origin,然後把你想要的版本貼上過來.這時候再輸入

protoc --version

 4.在/etc/ld.so.conf.d資料夾裡面建立libprotobuf.conf

 我在LT這麼一個奇葩資料夾裡面安裝的,前面已經說過,所以我的lib也在這。所以我要在裡面輸入/root/LT/lib

這時候版本就變了。由於不能解除安裝,所以我嘗試過各種辦法,然而都不好使。

如果你用caffe,請不要在makefile.config中用anaconda,要自己配置各種前置,不過沒準你就好使了呢。

為什麼說無奈之舉呢,因為這不是作者給的。而且是身首分離的,改變不了系統認準的地址,只能替換。我試過bashrc,命令列暫時的export也試過,都不能讓系統上LT找protobuf。不走常規的方式可能有風險。

相關推薦

一個簡單操作解決protobuf版本問題複製貼上

這個方法雖然簡單,但是我們有完美的利用anaconda的解決方案,能夠解決伺服器上大家版本衝突,你想要幾個環境就可以建立幾個完全不衝突的環境,算是一本萬利,教程在http://www.cnblogs.com/SweetBeens/p/8650460.html,推薦用這種方法。

一個簡單的form表單當光標離開表單的時候表單的值發送給後臺

bsp name clas blog var tex txt rip () 1 <body> 2 <form action="index.php"> 3 <input type="text" name="txt" id="txt

一個簡單的例子比較SVMMARS以及BRUTO(R語言)

err r語 模型訓練 n! 也有 kernel 訓練 tps mea 背景重述 本文是ESL: 12.3 支持向量機和核中表12.2的重現過程。具體問題如下: 在兩個類別中產生100個觀測值。第一類有4個標準正態獨立特征\(X_1,X_2,X_3,X_4\)。第二類也有四

一個簡單的shell小腳本批量ping主機ip的存活狀態

proc ges echo col 垃圾 ces null The scrip #!bin/bash #ping host ip #2018年7月17日 #The shell script author xiaolong for hostip in {200..210}

Java 鏈表(LinkNode)的簡單操作:初始化遍歷插入刪除等

代碼 初始化 結構體 class 如果 traverse linknode eth com 由於java中沒有結構體,所以用一個類來定義鏈表,代碼如下 主要包括一個data,還有一個指向後面一個節點的next 重寫了toString函數,返回你想要的數據 定義鏈表的類: p

pycharm2018最新啟用碼複製貼上就能解決的事!

第一步:複製貼上找到hosts檔案 第二步:複製貼上修改hosts檔案 第三步:開啟pycharm啟用頁面輸入啟用碼 小白常見失敗原因!!

UIAutomator2 一個簡單的練手demo自動刷東方頭條

UIAutomator2 一個簡單的練手demo,自動刷東方頭條 相容不是很好,還有情況沒有寫 import uiautomator2 as u2 import time n = 0 #連線裝置 # if u2.connect_usb(): # print("已連線USB

一個簡單的Form表單簡單的留言板實現

<!DOCTYPE html> <html lang="en"> <head>     <meta charset="UTF-8">     <title></title>  

RapidJson(V1.1.0)的Value簡單操作(拼接json串存取檔案中的json解析json串)

#include <rapidjson/document.h> #include <rapidjson/stringbuffer.h> #include <rapidjson/pointer.h> #include <rapidjson/writer.h

pycharm2018.11最新啟用碼複製貼上就能解決的事!

更新日誌:2018-11-01 第一步:複製貼上找到hosts檔案 先按下鍵盤的win + r ,然後複製c:\windows\system32\drivers\etc貼上到對話方塊回車開啟檔案管理器 第二步:複製貼上修改hosts檔案 開啟hosts檔

使用面向物件的程式設計思想寫一個簡單的控制檯計算器程式放鬆一下

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Calc

【Oracle】【FAQ】Oracle SQL Developer 編輯區不能刪除後退空格複製貼上等功能都失效的解決辦法

解決辦法:開啟選單並選擇Tools-prefrence-Accelerators-Load Preset-Default(工具-首選項-加速器-載入預設-Default)即可! 載入預設在右下方, 另外注意,如果已經設定為Default的話,你可以設定成其他的,然後點選確定

linux下文字編輯器vim的使用複製-貼上-替換-行號-撤銷-多檔案操作

文字檔案的編輯命令:vim 1、vim的三種狀態模式 1)命令模式(預設) 備註:命令模式下輸入“:q!”可以退出vim。 2)可編輯模式(通過命令模式下輸入小寫“i”進入可編輯模式;按Esc退出至命令模式) 備註:小寫i,在當前游標處插入;小寫a,在當前游標後插入

vue.js如何寫一個簡單的原生js模組瀏覽器中的表現如何?

請點選此處輸入圖片描述瀏覽器正在逐步的支援原生JavaScript模組。Safari和Chrome的最新版本已經支援它們了,Firefox和Edge也將很快推出。如果您是一個vue.js使用者,那關於JavaScript模組一個很酷的事就是他們允許您編寫您的元件到自己的檔案中

一個簡單的自定義View仿圓形進度條

一個很簡單的小例子,,整理一下 效果圖 上程式碼,程式碼中應該註釋很清楚了,就不再贅述,是模仿洋大神寫的,然後自己又加了一點兒自己的理解。 程式碼如下 package com.example.roundview; import android.content.Cont

Unity3d修煉之路:GUI按鈕簡單使用完成對一個簡單物件Cube的移動旋轉

#pragma strict private var m_pCubeObj : GameObject = null; private var m_pMeshFilter : MeshFilter = null; public var m_fTramslateSpeed :

怎麽把mp4轉換成gif格式?教一個簡單解決方法

roc shadow 視頻格式 mar 教你 在線 下載 找到 col 怎麽把mp4轉換成gif格式當我們有關於mp4格式的文檔怎麽轉換成gif格式的呢?下面小編就簡單給大家介紹一下。 輔助工具:迅捷PDF在線轉換器 步驟一:我們可以將需要轉換的mp4格式的文件進行保存到桌

一個簡單的php文件實現微信網頁授權回調域名的代理轉發

host 代理 sco com 文件 lose mage 一個 time 一個簡單的php文件,實現微信網頁授權回調域名的代理轉發 <?php function is_HTTPS() { if (!isset($_SERVER[‘HTTPS‘

一個存儲過程實例慢慢再加註釋!僅供自己學習

not in order datetime time 不顯示 top varchar union ide 1 USE [rfiddbHFKT] 2 GO 3 /****** Object: StoredProcedure [dbo].[ppque_tu] S

【轉】BBC解剖了一個200斤女子看完用生命去減肥!

一個 是否 ID 中國 RM 過度 中國人口 理學 enter 此文有部分血腥的解剖畫面,如果無法忍受可以現在關掉頁面!   最近BBC有一部紀錄片震驚全球,   他們用最直觀的方式告訴你肥胖有對可怕,   紀錄片的名字叫——解剖肥胖!▼   紀錄片中,兩位解剖病理學專家