我正在尝试在我的C ++应用程序中使用tensorflow作为外部库(主要是在this tutorial之后)。到目前为止我做了什么:
$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 issue,但在没有提供任何解决方案的情况下,它被标记为已关闭。我还尝试使用master
分支以及v.1.4.0
发布。
您是否碰巧知道,可能导致此类问题的原因以及如何处理?
答案 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 /的条目才能正确运行此条目,以便可以使用它。