我正在尝试在我的 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
有一个针对类似问题创建的 github 问题,但它被标记为已关闭,没有提供任何解决方案。我还尝试了
master
分支以及 v.1.4.0
发布。
您知道什么会导致此类问题以及如何处理吗?
我(和许多其他人)也为同样的问题而苦恼。它可能可以使用 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 项目。
稍微偏离主题,但我在使用 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/eigen3/unsupported/Eigen/CXX11/Tensor
但是Tensor文件中提到的是“unsupported/Eigen/CXX11/Tensor”
因此,项目路径中应该有一个到 /usr/include/eigen3/ 的条目才能正确运行它,以便可以使用它。
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