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

问题描述 投票:0回答:4

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

  1. 我已经克隆了张量流存储库(假设存储库根目录是
    $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
发布。

您知道什么会导致此类问题以及如何处理吗?

c++ tensorflow ubuntu-16.04 eigen3
4个回答
5
投票

我(和许多其他人)也为同样的问题而苦恼。它可能可以使用 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

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


2
投票

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

为了使其工作,我必须添加到我的根

CMakeLists.txt

add_definitions(-DOPENCV_DISABLE_EIGEN_TENSOR_SUPPORT)

如果这可以帮助某人......


1
投票

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

Tensor的安装路径是/usr/include/eigen3/unsupported/Eigen/CXX11/Tensor

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

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


0
投票

sudo cp -r /usr/include/eigen3/Eigen /usr/include && sudo cp -r /usr/include/eigen3/signature_of_eigen3_matrix_library /usr/include && sudo cp -r /usr/include/eigen3/不支持的/usr/include

© www.soinside.com 2019 - 2024. All rights reserved.