如何正确编译并执行TensorFlow C ++ API的示例?

时间:2017-10-06 13:46:57

标签: c++ tensorflow bazel

我在macOS上尝试了TensorFlow C ++ API(https://www.tensorflow.org/api_guides/cc/guide)的示例。

我做的是:

  1. 安装bazel
  2. git clone --recursive https://github.com/tensorflow/tensorflow
  3. ./ configure在上面的克隆目录中 (因为我的机器GPU很差,因此禁用了OpenCL支持)
  4. 根据指南制作tensorflow / cc / example / example.cc和tensorflow / cc / example / BUILD
  5. bazel run -c opt // tensorflow / cc / example:example
  6. 编译成功但发生了以下错误。

    dyld: Symbol not found: __ZN10tensorflow10DEVICE_CPUE
      Referenced from: /private/var/tmp/_bazel_yuji/a8fcd93e6cfa4967cc9ea4c6e4cf2977/execroot/org_tensorflow/bazel-out/darwin_x86_64-py3-opt/bin/tensorflow/cc/example/example
      Expected in: flat namespace
     in /private/var/tmp/_bazel_yuji/a8fcd93e6cfa4967cc9ea4c6e4cf2977/execroot/org_tensorflow/bazel-out/darwin_x86_64-py3-opt/bin/tensorflow/cc/example/example
    

    该示例不使用全局变量DEVICE_CPU,因此似乎是tensorflow库问题。

    我该如何避免呢?

    我在Ubuntu上尝试了同样的事情,并在编译的最后阶段遇到了很多链接器错误,例如,

    错误:对< symbol name>

    的未定义引用

1 个答案:

答案 0 :(得分:1)

我终于找到了解决方案。

指南中的以下构建可能不适合最新的张量流。

cc_binary(
    name = "example",
    srcs = ["example.cc"],
    deps = [
        "//tensorflow/cc:cc_ops",
        "//tensorflow/cc:client_session",
        "//tensorflow/core:tensorflow",
    ],
)

我根据BUILD in tensorflow / cc修改了它。

load(
    "//tensorflow:tensorflow.bzl",
    "tf_cc_binary",
)

tf_cc_binary(
    name = "example",
    srcs = ["example.cc"],
    deps = [
        "//tensorflow/cc:cc_ops",
        "//tensorflow/cc:client_session",
        "//tensorflow/core:tensorflow",
    ],
)

这就是全部。