tensorflow之编译使用c/c++动态链接库

版权声明: https://blog.csdn.net/hh_2018/article/details/81185198

tensorflow主流接口虽然是python,但是其也支持C语言的接口供大家调用,并且对于图像处理等方面c++是一种更为合适的语音。因此本文主要介绍一下如何安装并使用c版本的tensorflow。

一、 编译。

 编译的目的主要是为了产生对应的头文件和动态链接so文件。编译的方式有两种:

1. bazel build --config=opt //tensorflow/tools/lib_package:libtensorflow。然后在bazel-bin/tensorflow/tools/lib_package/目录下存在一个libtensorflow.tar.gz的压缩包。该压缩包中存在一个include文件夹和一个lib文件夹这两个文件夹就是tensorflow运行c程序所需要的头文件和动态链接文件。关于如何安装使用bazel请参考基于源码编译的那篇文章内容。

2. 直接下载编译好的文件。执行:
curl -L   "https://storage.googleapis.com/tensorflow/libtensorflow/libtensorflow-cpu-linux-x86_64-1.8.0.tar.gz" | sudo tar -C   /usr/local  -xz

该执行可以下载现有的litensorflow文件压缩包。并将其解压缩到/usr/local目录下。

二、配置

编译完成后需要将对应的include和lib放入相应的文件夹中,在此也有两种方式:

1. 放入到系统文件夹中,即/usr后面对应的include和lib,然后执行sudo ldconfig

2. 放入到自己文件夹中,我放入的是/usr/local下面的include和lib中。此时一定要注意添加LD_LIBRARY_PATH不然会无法链接到动态库。即: LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH;export LD_LIBRARY_PATH。

三、验证

使vi写入一段代码:Hellow_tf.c

#include <stdio.h>
#include <tensorflow/c/c_api.h>

int main() {
  printf("Hello from TensorFlow C library version %s\n", TF_Version());
  return 0;
}

然后执行:gcc -I/usr/local/include -L/usr/local/lib Hellow_tf.c -ltensorflow。此时在文件夹中会产生一个a.out文件。直接./a.out就会出现Hello from TensorFlow C library version 1.8.0。

四、关于错误。

如果在执行a.out时报./a.out: error while loading shared libraries: libtensorflow.so: cannot open shared object file: No such file or directory则表示找不到动态链接库,此时需要加入LD_LIBRARY_PATH

五、关于其他依赖

有许多博客介绍说还需要tensorflow/contrib/makefile文件夹下的build_all_linux.sh,我没有使用。个人感觉不需要也不知道是不是由于我使用源码编译过tensorflow的安装包已经安装了一些依赖。

猜你喜欢

转载自blog.csdn.net/hh_2018/article/details/81185198