Tensorflow C++动态库编译

Tensorflow编译成C++动态库

  • 本机配置环境
  • 安装bazel
  • 编译Protobuf源码
  • 编译Tensorflow
  • 测试编译结果

本机配置环境

Ubuntu 16.04
Python 2.7
CUDA 9.0
cuDNN 7
Bazel 0.17.2
TensorFlow 1.10
protobuf 3.5.0
GPU: RTX2080

安装bazel

  • 安装依赖

    sudo apt-get install pkg-config zip g++ zlib1g-dev unzip python

  • 下载bazel

    下载bazel--installer-linux-x86_64.sh,官方github链接link

  • 编译bazel

    chmod +x bazel--installer-linux-x86_64.sh
    ./bazel--installer-linux-x86_64.sh --user

  • 配置环境
    将下面的命令行添加到~/.bashrc中

    export PATH=“ P A T H : PATH: PATH:HOME/bin”

编译Protobuf源码

  • 下载并解压缩 protobuf-cpp-3.5.0.tar.gz文件 link
  • 进入解压后的文件夹

    cd protobuf-3.5.0
    ./autogen.sh ##下载自github的代码需要执行此行来生成configure文件
    ./configure
    make
    make check
    sudo make install
    sudo ldconfig
    protoc --version

编译Tensorflow

  • 下载tensorflow源码

    git clone [email protected]:tensorflow/tensorflow.git

  • 配置环境
    • 选择版本

      git checkout r1.10

    • 进入tensorflow文件夹

      cd tensorflow

    • tensorflow配置

      ./configure

    • 具体的配置如下
      Tensorflow C++动态库编译_第1张图片
      Tensorflow C++动态库编译_第2张图片
  • 进入 tensorflow 目录进行编译,编译成功后,在 /bazel-bin/tensorflow 目录下会出现 libtensorflow_cc.so 文件

    C版本: bazel build :libtensorflow.so
    C++版本: bazel build :libtensorflow_cc.so

  • 编译其他依赖
    • 进入 tensorflow/contrib/makefile 目录下,运行 ./build_all_linux.sh,成功后会出现一个gen文件夹
    • 若出现如下错误 /autogen.sh: 4: autoreconf: not found ,安装相应依赖即可 sudo apt-get install autoconf automake libtool

测试编译结果

  • Cmaklist.txt

    cmake_minimum_required(VERSION 2.8)
    project(demo)
    set(CMAKE_CXX_STANDARD 11)
    set(TENSORFLOW_DIR /home/hp/tensorflow)
    include_directories($ {TENSORFLOW_DIR})
    include_directories($ {TENSORFLOW_DIR}/tensorflow/contrib/makefile/gen/proto)
    include_directories($ {TENSORFLOW_DIR}/tensorflow/contrib/makefile/gen/protobuf-host/include)
    include_directories($ {TENSORFLOW_DIR}/tensorflow/contrib/makefile/downloads/eigen)
    include_directories($ {TENSORFLOW_DIR}/tensorflow/contrib/makefile/downloads/nsync/public)
    include_directories($ {TENSORFLOW_DIR}/tensorflow/contrib/makefile/downloads/absl)
    link_directories($ {TENSORFLOW_DIR}/tensorflow/contrib/makefile/gen/lib)
    link_directories($ {TENSORFLOW_DIR}/tensorflow/contrib/makefile/gen/protobuf-host/lib)
    link_directories($ {TENSORFLOW_DIR}/tensorflow/contrib/makefile/downloads/nsync/builds/default.linux.c++11)
    link_directories(${TENSORFLOW_DIR}/bazel-bin/tensorflow)
    add_executable(demo test.cpp)
    target_link_libraries(demo tensorflow_cc tensorflow_framework)

  • test.cpp

    #include
    #include
    #include < iostream>
    using namespace std;
    using namespace tensorflow;
    int main() {
    Session* session;
    Status status = NewSession(SessionOptions(), &session);
    if (!status.ok()) {
    cout << status.ToString() << “\n”;
    return 1;
    }
    cout << “Session successfully created.\n”;
    return 0;
    }

  • 测试tensorflow C++编译
    • 编译命令

      cmake .
      make
      ./test

    • 测试结果
      Tensorflow C++动态库编译_第3张图片

你可能感兴趣的:(深度学习,机器学习)