Tensorflow:动态库的使用(头文件提取,Makefile链接动态库)

还是要把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编译通过,运行一下:
最后可以得到对应输出:
在这里插入图片描述总算琢磨出来了。。。

发布了300 篇原创文章 · 获赞 203 · 访问量 59万+

猜你喜欢

转载自blog.csdn.net/Felaim/article/details/102784364
今日推荐