使用TensorFlow时"unsupported/Eigen/CXX11/Tensor: No such file or directory"



我正试图在C++应用程序中使用tensorflow作为外部库(主要遵循本教程)。到目前为止我做了什么:

  1. 我已经克隆了tensorflow repory(假设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
    

有一个针对类似问题创建的github问题,但它被标记为已关闭,没有提供任何解决方案。我还尝试了master分支以及v.1.4.0发布。

你知道吗,是什么导致了这种问题,以及如何处理?

我(和许多其他人)为同样的问题而苦恼。它可能可以用bazel解决,但我对这个工具还不够了解,现在我用make解决了这个问题。混淆的来源是包含了一个名为Tensor的文件,而它本身也包含了一份名为Tensor的文件。这导致一些人错误地认为Tensor包含了它自己。

如果你构建并安装了python.whl文件,dist包中会有一个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。然而,我相信你需要的所有头文件都在distpackages/tensorflow/include中,至少对于初学者来说,你可以构建makefile或cmake项目。

有点偏离主题,但我在一个使用opencv-4.5.5并使用Visual Studio编译的C++项目中遇到了同样的错误(opencv-4.3.0没有问题,MinGW也没有问题)。

为了使它发挥作用,我必须将CMakeLists.txt:添加到我的根目录中

add_definitions(-DOPENCV_DISABLE_EIGEN_TENSOR_SUPPORT)

如果这能帮助到某人。。。

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

Tensor的安装路径是/usr/include/igenu3/unsupported/Egent/CXX11/Tensor

但在张量文件中提到的是"不受支持的/Egengin/CX11/Tensor">

因此,在项目路径中应该有一个高达/usr/include/igent3/的条目来正确运行它,以便可以使用它。

相关内容

最新更新