要求:ubuntu14.04 tensorflow r1.4(按照官網教程安裝並運行成功)
可以在ubuntu中使用cmake make編譯C++工程,調用TensorFlow庫函數及其訓練好的神經網絡模型
1. Install JDK 8
(ubuntu16.04)
sudo apt-get install openjdk-8-jdk
(ubuntu14.04 )
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update && sudo apt-get install oracle-java8-installer
2. Add Bazel distribution URI as a package source (one time setup)
echo "deb [arch=amd64] http://storage.googleapis.com/bazel-apt stable jdk1.8" | sudo tee /etc/apt/sources.list.d/bazel.list
curl https://bazel.build/bazel-release.pub.gpg | sudo apt-key add -
(If you want to install the testing version of Bazel, replace stable with testing.)
3. Install and update Bazel
sudo apt-get update && sudo apt-get install bazel
(Once installed, you can upgrade to a newer version of Bazel with:)
sudo apt-get upgrade bazel
2.進入tensorflow_r1.4根目錄 執行 ./configure 根據需求選擇Y/N(參考tensorflow installing from sources官網)
3.編譯C++版本動態鏈接庫/C版本
進入路徑 /tensorflow-master/tensorflow 下 執行:
C版本:
bazel build :libtensorflow.so
C++版本:
bazel build :libtensorflow_cc.so
i7大約需要 50 分鐘
編譯成功後,在bazel-bin/tensorflow/目錄下會出現libtensorflow.so/libtensorflow_cc.so文件
4.其他依賴
在使用tensorflow c/c++接口時,會有很多頭文件依賴、protobuf版本依賴等問題
tensorflow/contrib/makefile目錄下,找到build_all_xxx.sh文件並執行,例如準備在linux上使用,就執行build_all_linux.sh文件,成功後會出現一個gen文件夾 大約需要30分鐘
5.編寫代碼和CMakeLists.txt
tf_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";
}
CMakelists.txt
cmake_minimum_required (VERSION 2.8)
project (tf_example)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -std=c++11 -W")
include_directories(
/home/xxx/tensorflow-master
/home/xxx/tensorflow-master/tensorflow/bazel-genfiles
/home/xxx/tensorflow-master/tensorflow/contrib/makefile/gen/protobuf/include
/home/xxx/tensorflow-master/tensorflow/contrib/makefile/gen/host_obj
/home/xxx/tensorflow-master/tensorflow/contrib/makefile/gen/proto
/home/xxx/tensorflow-master/tensorflow/contrib/makefile/downloads/nsync/public
/home/xxx/tensorflow-master/tensorflow/contrib/makefile/downloads/eigen
/home/xxx/tensorflow-master/bazel-out/local_linux-py3-opt/genfiles
)
add_executable(tf_test tf_test.cpp)
target_link_libraries(tf_test
/home/xxx/tensorflow-master/bazel-bin/tensorflow/libtensorflow_cc.so
/home/xxx/tensorflow-master/bazel-bin/tensorflow/libtensorflow_framework.so
)
一般來說編譯時找不到某個文件 可以在tensorflow的根目錄下面搜索它,然後添加到include裏面,bazel-×××幾個文件夾裏面也會有相應的頭文件(因爲權限問題可能得單獨搜一下,在父目錄裏面好像搜不到子目錄裏root權限的文件),都找一下。。