0
我已經通過virtualenv
安裝了TensorFlow。它運作良好。TensorFlow protobuf版本不匹配
現在我想使用C++加載模型並進行預測。但由於protobuf版本不匹配,我無法編譯我的程序。錯誤,如:
tensorflow/core/framework/device_attributes.pb.h:17:2: error: #error This file was generated by an older version of protoc which is
#error This file was generated by an older version of protoc which is
^
tensorflow/core/framework/device_attributes.pb.h:18:2: error: #error incompatible with your Protocol Buffer headers. Please
#error incompatible with your Protocol Buffer headers. Please
^
tensorflow/core/framework/device_attributes.pb.h:19:2: error: #error regenerate this file with a newer version of protoc.
#error regenerate this file with a newer version of protoc.
在的virtualenv:
$ pip show protobuf
Name: protobuf
Version: 3.4.0
Summary: Protocol Buffers
而且在外殼:
$ protoc --version
libprotoc 3.4.0
我曾經在我的環境protobuf-2.6.1
但現在升級到3.4.0
。
的ubuntu 16.04
我已經完成'apt-get remove protobuf-dev protobuf-compiler',然後我像前面提到的那樣從源代碼安裝protobuf。但實際上,當我的安裝位於'/ usr/local/lib'時,'/ usr/lib'下仍然存在'libprotobuf.so'。順便說一句,有一個'libprotobuf9v5'在我的Ubuntu的,我想這就是原因。但卸載它將同時刪除gnome桌面和其他有點有線的軟件包。 –
@JasonRen是的,'libprotobuf9v5'是Ubuntu中的C++協議緩衝區運行時庫。看起來Gnome本身就是使用協議緩衝區,所以刪除它不是一個好主意。你需要編譯更新的版本,並配置編譯器和鏈接器來選擇正確的頭文件和庫(正如我所說的,更喜歡靜態鏈接,否則你的程序將嘗試加載安裝在系統中的舊版本並失敗)。 – jdehesa
但面對protobuf沒有用我自己的代碼。 TensorFlow使用它。我怎樣才能靜態鏈接一個沒有被我直接使用的庫?@jdehesa –