2017-02-15 9 views
2

私はテキスト分類プロジェクトに取り組んでいます。これは大きく、ビルゼルツールとしてbazelを使用していません。自分のプロジェクトにテンソルフローを統合したいのですが、ビルドツールをbazelに変更するのは難しいです。ですから、私はtensorflowで静的ライブラリを構築し、それらを私のプロジェクトにリンクしたいと考えています。 誰かがスタンドアロンスタティックライブラリをtensorflowソースにビルドして既存のC++プロジェクトにリンクする方法を知っていますか?どうもありがとう。LinuxプラットフォームでC++プロジェクトに静的ライブラリとリンクを構築する方法は?

+0

[静的ライブラリの作成](http://stackoverflow.com/questions/5947067/how-to-create-a-static-library-with-g)と[静的ライブラリの作成と使用](詳細な手順についてはhttp://codingfreak.blogspot.com/2010/01/creating-and-using-static-libraries-in.htmlを参照してください。 Googleでまず質問をする前に習慣をつけてください。 –

+0

'ar(1)'で '.a'アーカイブに入れ、' ranlib(1) 'を実行してください。 'ranlib(1)'はlinuxでは必要ではありませんが、とにかくそれを行うには良い使用法です。 'lib' * *' .a'というライブラリを呼び出して適切なディレクトリに置くと、 '-l' * *パラメータでコンパイラを呼び出すことができます。 –

答えて

4

TensorFlowリポジトリには、静的ライブラリ(tensorflow/contrib/Makefileを参照)を構築するために使用できるMakefileがいくつかあります。

また、bazelを使用してTensorFlow C++共有ライブラリを構築してから、共有ライブラリをロードしてアプリケーション(bazel build -c opt //tensorflow:libtensorflow_cc.so)に使用することもできます。残念なことに、bazelはまだ静的ライブラリ(#1920)を生成できません。

希望に役立ちます。

+0

おかげさまで、makefileチュートリアルの後、私はlibtensorflow-core.aを正常にビルドします。しかし、main.ccに "tensorflow/core/public/session.h"を含めて "gcc -c main.cc"を実行しようとすると、 'tensorflow/core/framework/graph.pb.h'ファイルが見つからないというエラーが表示されます。そのファイルはbazelによって自動的に生成されます。しかし、私はバゼルを使うことができませんでした。あなたはそれを知っていますか? –

+0

'pb.h'ファイルは' gen/'サブディレクトリ(おそらく' gen/host_obj')のどこかにあるMakefileビルドによっても生成されます。そのディレクトリを 'gcc'のインクルードパスに追加する必要があります。 – ash

+0

アドバイスをいただきありがとうございます。インクルードパスに必要なディレクトリを含めます。私はデモコードtest.ccを書いています。これには "session.h"と "env.h"が含まれています。そして、 "status status = NewSession(SessionOptions()、&session);"を使用して、test.ccでセッションを初期化します。次に、libtensorflow-core.aに "gcc -o test test.cc -I ... -L ... -ltensorflow-core -std = C++ 11"を使用してリンクしようとします。これは、アーキテクチャx86_64 clang:error:linkerコマンドが終了コード1で失敗しました(呼び出しを見るために-vを使用します) "というエラーを示しています。また、「OSXをビルドするが、iOS用に構築されたオブジェクトファイルにリンクする」という警告も出されている。 –

関連する問題