还是要把Tensorflow包含在自己的工程下面,所以主要的操作就是链接自己文件夹中的库文件,抽取Tensorflow需要的头文件,看了很多博客,都是一带而过,具体如何操作呢?
新建一个头文件路径,
mkdir inc
cd inc
mkdir tf_14
将对应头文件复制到对应的tf_14文件夹下
cp -r your_path to_tf/bazel-genfiles/* ./inc/tf_14
cp -r your_path_to_tf/tensorflow/cc ./inc/tf_14/tensorflow
cp -r your_path_to_tf/tensorflow/core ./inc/tf_14/tensorflow
cp -r your_path_to_tf/thirdparty ../inc/tf_14
将库文件放到lib文件夹下
mkdir lib
cp -r your_path_to_tf/bazel-bin/tensorflow/libtensorflow_cc.so.14.1 ./lib/
cp -r your_path_to_tf/bazel-bin/tensorflow/libtensorflow_frame.so.1.14.1 ./lib
#建立对应的软链接
ln -s libtensorflow_cc.so.1.14.1 libtensorflow_cc.so.1
ln -s libtensorflow_cc.so.1 libtensorflow_cc.so
ln -s libtensorflow_framework.so.1.14.1 libtensorflow_framework.so.1
ln -s libtensorflow_framework.so.1 libtensorflow_framework.so
写对应的Makefile,当中还有opencv的库,LZ就不删了。。。
OURCE_ROOT = $(shell pwd)
SOURCE = example_trainer.cc
OBJS = test.o
TARGET = test
OBJS_DEBUG = test_debug.o
TARGET_DEBUG = test_debug
# compile and lib parameter
CC = g++
LIBS += -ltensorflow_cc -ltensorflow_framework
LIBS += -lopencv_highgui -lopencv_imgcodecs -lopencv_calib3d -lopencv_imgproc -lopencv_flann -lopencv_core
LIBS += -lcairo -lgtk-3 -lgdk_pixbuf-2.0 -lgobject-2.0
LIBS += -llibjasper -lIlmImf -lippiw -llibjpeg -llibpng -llibtiff -lippicv -llibwebp -littnotify -lz
LIBS += -ldc1394 -lraw1394 -lm -ldl
#STATIC_LIBS =
LDFLAGS += -L./lib -L./lib/opencvLib
LDFLAGS += -L../boost/stage/lib -pthread
INCLUDE += -I ./ -I ./inc -I ./inc/opencv -I ./
INCLUDE += -I ./inc/tf_14 -I ./inc/tf_14/third_party
CFLAGS += -Wall -O -fPIC
CXXFLAGS += -std=gnu++11
all: $(TARGET) $(TARGET_DEBUG)
# link
$(TARGET):$(OBJS)
$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) $(STATIC_LIBS) $(CFLAGS) $(INCLUDE) $(CXXFLAGS)
$(TARGET_DEBUG):$(OBJS_DEBUG)
$(CC) -o $@ $^ $(LDFLAGS) $(LIBS) $(STATIC_LIBS) $(CFLAGS) $(INCLUDE) $(CXXFLAGS) -g
#compile
$(OBJS):$(SOURCE)
$(CC) $(CFLAGS) $(INCLUDE) $(CXXFLAGS) -o $@ -c $^
$(OBJS_DEBUG):$(SOURCE)
$(CC) $(CFLAGS) $(INCLUDE) $(CXXFLAGS) -g -o $@ -c $^
# clean
clean:
rm -fr *.o
rm -fr $(TARGET) $(TARGET_DEBUG)
编译的时候会报如下的错误;
g++ -Wall -O -fPIC -I ./ -I ./inc -I ./inc/opencv -I ./ -I ./inc/tf_14 -I ./inc/tf_14/third_party -std=gnu++11 -o test.o -c example_trainer.cc
In file included from ./inc/tf_14/tensorflow/core/framework/tensor.h:21:0,
from ./inc/tf_14/tensorflow/cc/framework/ops.h:21,
from ./inc/tf_14/tensorflow/cc/ops/array_ops.h:8,
from ./inc/tf_14/tensorflow/cc/ops/standard_ops.h:19,
from example_trainer.cc:21:
./inc/tf_14/third_party/eigen3/unsupported/Eigen/CXX11/Tensor:1:42: fatal error: unsupported/Eigen/CXX11/Tensor: No such file or directory
#include "unsupported/Eigen/CXX11/Tensor"
^
compilation terminated.
make: *** [test.o] Error 1
缺了Eigen,补上就行
cp -r your_path_to_eigen/eigen ./inc/tf_14/eigen
Makefile添加eigen头文件
INCLUDE += -I ./inc/tf_14/eigen
make然后继续报错:
g++ -Wall -O -fPIC -I ./ -I ./inc -I ./inc/opencv -I ./ -I ./inc/tf_14 -I ./inc/tf_14/third_party -I ./inc/tf_14/eigen -std=gnu++11 -o test.o -c example_trainer.cc
In file included from ./inc/tf_14/tensorflow/core/framework/tensor.h:22:0,
from ./inc/tf_14/tensorflow/cc/framework/ops.h:21,
from ./inc/tf_14/tensorflow/cc/ops/array_ops.h:8,
from ./inc/tf_14/tensorflow/cc/ops/standard_ops.h:19,
from example_trainer.cc:21:
./inc/tf_14/tensorflow/core/framework/allocator.h:24:38: fatal error: absl/strings/string_view.h: No such file or directory
#include "absl/strings/string_view.h"
^
compilation terminated.
make: *** [test.o] Error 1
缺了absl,再加上
cp -r your_path_to_absl/absl ./inc/tf_14/absl
同时修改Makefile
INCLUDE += -I ./inc/tf_14/absl
make编译通过,运行一下:
最后可以得到对应输出:
总算琢磨出来了。。。