Tensorflow编译成C++动态库
本机配置环境
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 git@github.com:tensorflow/tensorflow.git
- 配置环境
- 选择版本
git checkout r1.10
- 进入tensorflow文件夹
cd tensorflow
- tensorflow配置
./configure
- 具体的配置如下
- 选择版本
- 进入 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 <tensorflow/core/platform/env.h>
#include <tensorflow/core/public/session.h>
#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 - 测试结果
- 编译命令