【问题标题】:Tensorflow undefined reference to `tensorflow::TensorShapeBase<tensorflow::TensorShape>::TensorShapeBase(absl::Span<long const>)'Tensorflow 未定义引用 `tensorflow::TensorShapeBase<tensorflow::TensorShape>::TensorShapeBase(absl::Span<long const>)'
【发布时间】:2022-06-17 06:07:14
【问题描述】:

我正在使用 Tensorflow 的 C++ API 来加载和运行保存的模型。当我使用优化标志 -O2 在 GCC 中构建我的 C++ 代码时,我收到以下错误:

undefined reference to `tensorflow::TensorShapeBase<tensorflow::TensorShape>::TensorShapeBase(absl::Span<long const>)'

我认为这是由于创建了以下张量:

Tensor my_tensor(DT_DOUBLE, TensorShape({2, 4}));

但是,如果我在没有编译器标志-O2 的情况下构建我的 C++ 代码,则代码会完美地构建和执行。我正在使用从源代码构建的 Tensorflow 2.5 库。

关于如何修复错误的任何建议?

【问题讨论】:

    标签: c++ tensorflow


    【解决方案1】:

    该问题与使用 ABSL 编译 Tensorflow 时 C++14 和 C++17 之间的冲突有关。 看到这个link

    Tensorflow_cc 库使用自己的 Absl 副本,并使用 函数签名中的 absl::string_view。 absl::string_view 被映射 如果检测到 C++17,则为 std::string_view,如果检测到,则为自己的实现 C++17 不是。使用 Arch 时会导致这样的链接器错误 来自 C++17 代码的 tensorflow_cc 库: 解决方法是注释掉这些行:Using the library 在以 C++11 模式(Arch)构建库之后从 C++17 开始

    一种解决方法是在 tensorflow/include/absl/base/config.h 中注释掉这一行:

    #define ABSL_HAVE_STD_STRING_VIEW 1
    

    这将使库查找自定义 absl::string_view 实现,即使从 C++17 调用 tensorflow。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 2021-10-10
      相关资源
      最近更新 更多