Sza*_*Pał 6 c++ eigen3 tensorflow ubuntu-16.04
我正在尝试在我的 C++ 应用程序中使用 tensorflow 作为外部库(主要遵循本教程)。到目前为止我做了什么:
$TENSORFLOW)/.configure(所有设置默认,所以没有 CUDA,没有 OpenCL 等)。bazel build -c /opt //tensorflow:libtensorflow_cc.so(构建成功完成)构建共享库现在我正在尝试#include "tensorflow/core/public/session.h"。但是在包含它(并添加$TENSORFLOW和$TENSORFLOW/bazel-genfiles包含路径)之后,我收到错误:
$TENSORFLOW/tensorflow/third_party/eigen3/unsupported/Eigen/CXX11/Tensor:1:42:
fatal error: unsupported/Eigen/CXX11/Tensor: No such file or directory
Run Code Online (Sandbox Code Playgroud)有一个为类似问题创建的github问题,但它被标记为已关闭而没有提供任何解决方案。我也尝试过master分支和v.1.4.0发布。
您是否知道,可能导致此类问题的原因以及如何处理?
小智 5
我(和许多其他人)也为同样的问题而苦恼。它可能可以使用 bazel 解决,但我不太了解该工具,现在我使用 make 解决这个问题。混乱的根源在于包含了一个名为 Tensor 的文件,而它本身也包含了一个名为 Tensor 的文件,这导致一些人错误地认为 Tensor 包含了它自己。
如果您构建并安装了 python .whl 文件,dist-packages 中将有一个 tensorflow 目录,并且下面有一个 include 目录,例如在我的系统上:
/usr/local/lib/python2.7/dist-packages/tensorflow/include
Run Code Online (Sandbox Code Playgroud)
从包含目录
find . -type f -name 'Tensor' -print
./third_party/eigen3/unsupported/Eigen/CXX11/Tensor
./external/eigen_archive/unsupported/Eigen/CXX11/Tensor
Run Code Online (Sandbox Code Playgroud)
第一个有
#include "unsupported/Eigen/CXX11/Tensor"
Run Code Online (Sandbox Code Playgroud)
满足这一点的文件是第二个。
因此,要编译包含 session.h 的 session.cc,以下内容将起作用
INC_TENS1=/usr/local/lib/python2.7/dist-packages/tensorflow/include/
INC_TENS2=${INC_TENS1}external/eigen_archive/
gcc -c -std=c++11 -I $INC_TENS1 -I $INC_TENS2 session.cc
Run Code Online (Sandbox Code Playgroud)
我见过这样的说法:您必须从张量流树构建应用程序并且必须使用 bazel。但是,我相信您需要的所有头文件都在 dist-packages/tensorflow/include 中,至少对于初学者来说,您可以构建 makefile 或 cmake 项目。