主要参考:【1】https://blog.csdn.net/gubenpeiyuan/article/details/80855644
【2】https://www.tensorflow.org/install/source?h=zn-ch#configure_the_installation
【3】https://www.cnblogs.com/yangwithtao/p/9091142.html
【4】https://blog.csdn.net/qq_16775293/article/details/81119375
【5】https://blog.csdn.net/rockingdingo/article/details/75452711
【6】https://zhuanlan.zhihu.com/p/46566618
【7】https://www.jianshu.com/p/d92913173d5b
1. 基础环境安装(bazel,gcc,protocbuf,eigen3)
我的机器是ubuntu 16.4 64位的,bazel的安装要和使用的tensorflow版本对应,官方安装教程里给出了对应的版本关系,可是经测试没有参考价值,会提示出错。比如我使用的是tensorflow-1.8.0,官方给出的gcc版本是4.8,Bazel版本是0.10.0,可是编译的时候会失败,提示升级到Bazel 0.26.1以上,gcc会提示不支持C++14,升级到gcc 5才编译成功。
- Bazel安装使用参考【7】,使用二进制安装。
- gcc的安装使用参考【3】,包括gcc版本切换方式。
- eigen3安装最新版就可以
- protocbuf的版本很重要,需要在tensorflow的源文件tensorflow/worksapce.bzl里找到下载链接。
2. 下载tensorflow源码,编译c++ api
tensorflow源文件下载地址https://github.com/tensorflow/tensorflow/releases,我用的tensorflow 1.8.0。
第一步进入tensorflow文件夹中,首先进行项目配置
./configure
配置过程中处了填写路径,所有的选项都选择了N。
配置成功后,利用bazel编译
bazel build --config=opt //tensorflow:libtensorflow_cc.so
编译完成后,在bazel-bin/tensorflow中会生成两个我们需要的库文件:libtensorflow_cc.so 和 libtensorflow_framework.so。
在后面我们用C++调用tensorflow时需要链接这两个库文件。
3. 使用tensorflow C++ api调用图模型(.pb文件)
这里主要参考【1】的方法。
cmake_minimum_required (VERSION 2.8.8)
project (tf_example)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -W")
link_directories(./lib)
include_directories(
/home/jwh/Documents/Tesla/tensorflow-1.8.0
/home/jwh/Documents/Tesla/tensorflow-1.8.0/bazel-genfiles
/home/jwh/Documents/Tesla/tensorflow-1.8.0/bazel-bin/tensorflow
/home/jwh/Documents/Tesla/tensorflow-1.8.0/tensorflow/contrib/makefile/downloads/nsync/public
/home/jwh/Documents/Tesla/tensorflow-1.8.0/tensorflow/contrib/makefile/downloads/protobuf/include
/home/jwh/Documents/Tesla/tensorflow-1.8.0/tensorflow/contrib/makefile/downloads/absl
/usr/local/include/eigen3
)
add_executable(tf_test tf.cpp)
target_link_libraries(tf_test tensorflow_cc tensorflow_framework)
但是在编译【1】中提供的工程时出现了错误,没有解决
这个错误时英文编译时,tensorfow源文件没下载全,执行一下命令
./tensorflow/contrib/makefile/download_dependencies.sh
执行此命令会下载一些文件,在makefile文件夹多了一个downloads文件夹
之后继续执行make 命令,继续出错
感觉像是C语言编译器的错误,不知怎么解决