2017-09-15 31 views
0

TensorFlowをvirtualenv経由でインストールしました。それはうまくいく。TensorFlowバージョン不一致

今、私はC++を使ってモデルを読み込み、予測をしたいと思います。しかし、バージョンの不一致が原因でプログラムがコンパイルされません。

$ pip show protobuf 
Name: protobuf 
Version: 3.4.0 
Summary: Protocol Buffers 

そしてシェルで:virtualenvので

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. 

:エラーのよう

$ protoc --version 
libprotoc 3.4.0 

私は、私の環境でprotobuf-2.6.1を持っていますが、今3.4.0にアップグレードするために使用しました。問題はTensorFlowコンパイルプロセスが使用していることです

のUbuntu 16.04

答えて

1

は、プロトコルバッファの独自の分布を引っ張ります。 TensorFlow v1.3.0以降、この配布はプロトコルバッファ3.3.0です。独自のC++コードとTensorFlowで生成されたヘッダーを混在させたい場合は、まったく同じバージョンを使用する必要があります(または単にスクリプトを使用してBazelによってダウンロードされた配布ファイルを使用する必要があります)。

もう1つの方法は、独自のメッセージ記述ファイルから独自のprotocで独自のヘッダを生成することです。

+0

私はソースからprotobufをインストールする前に、 'apt-get protobuf-dev protobuf-compiler'を実行しました。しかし、実際には '/ usr/local/lib 'に' '/ usr/lib'の下に' libprotobuf.so'があります。 Btwには私のubuntuに 'libprotobuf9v5'があり、それが理由だと思います。しかし、アンインストールすると同時にgnome-desktopや他のパッケージが削除されます。 –

+0

@JasonRenはい、 'libprotobuf9v5'はUbuntuのC++プロトコルバッファランタイムライブラリです。 Gnomeはプロトコルバッファ自体を使用しているようですので、それを削除することはお勧めできません。新しいバージョンをコンパイルして、適切なヘッダーとライブラリを選択するようにコンパイラとリンカーを構成する必要があります(静的リンクを推奨します。そうしないと、プログラムは古いバージョンをシステムにインストールして失敗します)。 – jdehesa

+0

しかし、protobufは自分のコードでは使用されていません。 TensorFlowはそれを使用します。私が直接使用していないライブラリを静的リンクするにはどうしたらいいですか?@jdehesa –

関連する問題