简单的C ++ TensorFlow Lite测试程序的问题包括Eigen

时间:2019-02-20 06:02:31

标签: c++ include-path eigen3 tensorflow-lite

我按照此官方enter image description here建议的步骤(本机编译,下载必要的库),使用脚本${TENSORFLOW_ROOT}/tensorflow/lite/tools/make/build_rpi_lib.sh为TensorFlow Lite(r1.97)的C ++ API编译了库。 ${TENSORFLOW_ROOT}是我克隆存储库的根文件夹。

我正在尝试编译这个简单的test.cpp程序:

#include <memory>

#include "tensorflow/lite/interpreter.h"

int main(void)
{
    std::unique_ptr<tflite::Interpreter> interpreter(new tflite::Interpreter);
}

使用命令:

gcc-6 test.cpp -I${TENSORFLOW_ROOT} -I${TENSORFLOW_ROOT}/tensorflow/contrib/makefile/downloads/eigen -I${TENSORFLOW_ROOT}/tensorflow/contrib/makefile/downloads/protobuf/src -I${TENSORFLOW_ROOT}/tensorflow/contrib/makefile/downloads -L${TENSORFLOW_ROOT}/tensorflow/lite/tools/make/gen/rpi_armv7l/lib -lstdc++ -ldl -ltensorflow-lite

page页(特别是iOS部分)中建议了包含列表。编译失败,并出现以下与包含本征有关的错误:

${TENSORFLOW_ROOT}/third_party/eigen3/unsupported/Eigen/CXX11/Tensor:1:42: fatal error: unsupported/Eigen/CXX11/Tensor: No such file or directory
 #include "unsupported/Eigen/CXX11/Tensor"

我发现了几个链接,这些链接讨论了一个显然相似的问题(例如此Integrating TensorFlow libraries),但是建议的解决方案涉及使用对TensorFlow python包的引用,这在我的情况下是不可能的(而且感觉很零散-我不考虑在此项目中使用python。)

我还尝试了使用另一条包含特征的包含路径(例如${TENSORFLOW_ROOT}/third_party/eigen3):

gcc-6 test.cpp -I${TENSORFLOW_ROOT} -I${TENSORFLOW_ROOT}/third_party/eigen3 -I${TENSORFLOW_ROOT}/tensorflow/contrib/makefile/downloads/protobuf/src -I${TENSORFLOW_ROOT}/tensorflow/contrib/makefile/downloads -L${TENSORFLOW_ROOT}/tensorflow/lite/tools/make/gen/rpi_armv7l/lib -lstdc++ -ldl -ltensorflow-lite

这也会导致与Eigen相关的此类编译错误:

...
${TENSORFLOW_ROOT}/third_party/eigen3/unsupported/Eigen/CXX11/Tensor:1:42: error: #include nested too deeply
 #include "unsupported/Eigen/CXX11/Tensor"
...
${TENSORFLOW_ROOT}/third_party/eigen3/Eigen/Core:1:22: error: #include nested too deeply
 #include "Eigen/Core"
...

有关如何解决此问题的任何建议?正确的包含路径集是什么?

1 个答案:

答案 0 :(得分:0)

结果是我输入了错误的文件夹。代替${TENSORFLOW_ROOT}/tensorflow/contrib/makefile/downloads/eigen${TENSORFLOW_ROOT}/third_party/eigen3的是右边的${TFLITE_ROOT}/tensorflow/lite/tools/make/downloads/eigen

我仍然对存储库中eigen个文件夹的数量感到困惑:

find . -name "eigen*" -type d                                                                                                                                             
./third_party/eigen3
./tensorflow/lite/tools/make/downloads/eigen