还是要把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/eigenMakefile添加eigen头文件
INCLUDE += -I ./inc/tf_14/eigenmake然后继续报错:
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/abslmake编译通过,运行一下:
最后可以得到对应输出:总算琢磨出来了。。。