使用TensorFlow时“不支持/ Eigen / CXX11 / Tensor:没有此类文件或目录”

时间:2017-10-13 13:31:27

标签: c++ tensorflow ubuntu-16.04 eigen3

我正在尝试在我的C ++应用程序中使用tensorflow作为外部库(主要是在this tutorial之后)。到目前为止我做了什么:

  1. 我克隆了tensorflow reporitory(比方说,repo根目录是$TENSORFLOW
  2. 运行/.configure(所有设置都默认,所以没有CUDA,没有OpenCL等。)
  3. 使用bazel build -c /opt //tensorflow:libtensorflow_cc.so构建共享库(构建成功完成)
  4. 现在我正在尝试#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
    
  5. 为类似问题创建了github issue,但在没有提供任何解决方案的情况下,它被标记为已关闭。我还尝试使用master分支以及v.1.4.0发布。

    您是否碰巧知道,可能导致此类问题的原因以及如何处理?

2 个答案:

答案 0 :(得分:2)

我(和许多其他人)为同一个问题感到痛苦。使用bazel可能可以解决问题,但是我对该工具不够了解,现在我使用make解决了这个问题。造成混淆的原因是,其中包含一个名为Tensor的文件,它本身包含一个名为Tensor的文件,这导致一些人错误地认为Tensor包含了它本身。

如果您构建并安装了python .whl文件,则dist-packages中将存在一个tensorflow目录,该目录下将包含一个include目录,例如在我的系统上:

/usr/local/lib/python2.7/dist-packages/tensorflow/include

在包含目录中

find . -type f -name 'Tensor' -print
./third_party/eigen3/unsupported/Eigen/CXX11/Tensor
./external/eigen_archive/unsupported/Eigen/CXX11/Tensor

第一个有

#include "unsupported/Eigen/CXX11/Tensor"

第二个应该满足此要求的文件。

因此,要编译包含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

我见过有人声称必须从tensorflow树构建应用程序,并且必须使用bazel。但是,我相信您需要的所有头文件都在dist-packages / tensorflow / include中,并且至少对于初学者而言,您可以构建makefile或cmake项目。

答案 1 :(得分:0)

问题实际上出在Tensor文件中的头文件的相对路径中。

张量的安装路径为/ usr / include / eigen3 / unsupported / Eigen / CXX11 / Tensor

但在Tensor文件中提到的是“ unsupported / Eigen / CXX11 / Tensor”

因此,在项目路径中应该存在直到/ usr / include / eigen3 /的条目才能正确运行此条目,以便可以使用它。