Tensorflowをc++のcmakeしてるプロジェクトで使いたい
tensorflowといえばpythonといったイメージを勝手に持ち続けていたが、c++も対応していることを知ったので使ってみることにした。
さっそく環境づくり
とりあえず、tensorflowのビルドに必要なあたりを揃えていこう。
tensorflowはbazelを使用してのビルドを推奨している。
よって、bazelのインストールから。
bazelインストール
Arch linuxの人は、
$ yaourt -S bazel
他の方は、公式を参考に。
GPU使いたい人は
$ sudo pacman -S cuda
$ sudo pacman -S cudnn
tensorflow
ソースをgitから取ってくる
$ hub clone tensorflow/tensorflow
$ cd tensorflow
GPUを使うかなどの設定を行う
$ ./configure
指示に従って、自分の使いたいように指定しましょう。
自分はGPUのサポートだけy
で、他はn
でしたね。
path等はご自分の環境に合わせましょう。
この後は、exampleを実行したいだけならbazelで指定してbuildするだけで良い。
今回は、他のプロジェクトで使用したいため共有ライブラリとヘッダたちを取ってくる。
共有ライブラリの生成
BUILDを読むと、それらしきものが用意されてるので生成する。
GPUなし
$ bazel build -c opt --copt=-march=native tensorflow:libtensorflow.so
GPUあり
$ bazel build -c opt --config=cuda --copt=-march=native tensorflow:libtensorflow.so
成功すれば、libtensorflow_cc.soがbazel-bin/tensorflow/
にできているはず。
これを/usr/lib/
等にコピー
$ sudo cp bazel-bin/tensorflow/libtensorflow_cc.so /usr/lib/tensorflow.so
ヘッダファイルの抽出
Gistにスクリプトをあげてる方がいたのでそれを使用した。
HEADER_DIR
を/usr/include/tensorflow
に変えて実行。
$ sudo sh copy_tensorflow_headers.sh
これで、ライブラリへのリンクと、ヘッダファイルのところへインクルードパスを設定すれば動作するが、cmakeを書きやすくする。
FindTensorflow.cmakeの作成(任意)
このままだとcmakeでfind_packageしても見つからない。
そこで、FindTensorflow.cmakeを作っておこうというだけ。
これを他のFindFoo.cmake
がある場所におく。
例:
cp FindTensorflow.cmake /usr/share/cmake-3.7/Modules/
あとは、CMakeLists.txt
のほうで
find_package(Tensorflow REQUIRED)
include_directories(
${Tensorflow_INCLUDE_DIRS}
)
target_link_libraries(${PROJECT_NAME} ${Tensorflow_LIBRARIES})
のような感じで書いて終わり!
Author And Source
この問題について(Tensorflowをc++のcmakeしてるプロジェクトで使いたい), 我々は、より多くの情報をここで見つけました https://qiita.com/Tacha-S/items/5bb18c631868b6b15517著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .