背景
目前对Tensorflow的主流应用模式是使用python训练模型,使用c++或者java应用训练好的模型。上篇博客介绍了如何在工程中应用Tensorflow 动态库,本博客介绍如何在工程中应用Tensorflow静态库
编译静态链接库
clone tensorflow git 仓库
git clone https://github.com/tensorflow/tensorflow.git
cd tensorflow
进入 tensorflow 工程下contrib/makefile路径
tensorflow/contrib/makefile
运行编译脚本
# MacOS 以及Linux 使用此脚本
./build_all_linux.sh
脚本执行完成后我们得到tensorflow静态库以及相应头文件。
下一步我们将Tensorflow静态库头文件及Tensorflow依赖的静态库头文件整理到统一路径下,其他c++ 工程就可以应用这些库文件及头文件。
# 将tensorflow 头文件以及库文件收集到此路径
mkdir -p ~/tensorflow_libs/tensorflow
# include 路径存放tensorflow主要头文件
mkdir -p ~/tensorflow_libs/tensorflow/include/tensorflow
# lib 路径存放编译好的静态库
mkdir -p ~/tensorflow_libs/tensorflow/lib
# 拷贝tensorflow 主要头文件
cp -r tensorflow/core ~/tensorflow_libs/tensorflow/include
# 拷贝tensoflow 静态库
cp tensorflow/contrib/makefile/gen/lib/libtensorflow-core.a ~/tensorflow_libs/tensorflow/lib
# 拷贝tensorflow 第三方头文件
mkdir -p ~/tensorflow_libs/tensorflow/tensorflow_third_party
cp -r third_party ~/tensorflow_libs/tensorflow/tensorflow_third_party
# 拷贝gen目录下文件
cp -r tensorflow/contrib/makefile/gen/host_obj ~/tensorflow_libs/tensorflow/
cp -r tensorflow/contrib/makefile/gen/proto ~/tensorflow_libs/tensorflow/
cp -r tensorflow/contrib/makefile/gen/protobuf ~/tensorflow_libs/tensorflow/
cp -r tensorflow/contrib/makefile/gen/proto_text ~/tensorflow_libs/tensorflow/
# 拷贝downloads下文件
# eigen3
mkdir -p ~/tensorflow_libs/tensorflow/eigen3
cp -r tensorflow/contrib/makefile/downloads/eigen/Eigen ~/tensorflow_libs/tensorflow/eigen3
cp -r tensorflow/contrib/makefile/downloads/eigen/unsupported ~/tensorflow_libs/tensorflow/eigen3
# absl
cp -r tensorflow/contrib/makefile/downloads/absl ~/tensorflow_libs/tensorflow/
# nsyc
mkdir -p ~/tensorflow_libs/tensorflow/nsyc/include
mkdir -p ~/tensorflow_libs/tensorflow/nsyc/lib
# 拷贝nsyc 头文件
cp -r tensorflow/contrib/makefile/downloads/nsync/* ~/tensorflow_libs/tensorflow/nsyc/include
# 拷贝nsyc 库文件
cp tensorflow/contrib/makefile/downloads/nsync/builds/default.macos.c++11/libnsync.a ~/tensorflow_libs/tensorflow/nsyc/lib
应用静态链接库
示例python model
我们使用一个简单的model作为示例,该model实现了两个字符串拼接的功能。模型保存到test_model.pb。代码如下
#-*- coding: utf-8 -*-
"""
File Name: test_model.py
Author: ce39906
mail: ce39906@163.com
Created Time: 2018-09-11 17:15:32
"""
import tensorflow as tf
a = tf.Variable("hello ", name = <