【问题标题】:Tensorflow: dynamic linking with shared libraryTensorflow:与共享库的动态链接
【发布时间】:2017-03-28 17:04:23
【问题描述】:

我正在做一个使用 Tensorflow 的共享库。现在我将它作为子项目放置在 Tensorflow 的源代码树中,并带有以下 BUILD 文件:

cc_binary(
    name = "recognizer.so",
    srcs = glob(["recognizer.cpp"]),
    linkshared = 1,
    deps = [
        "//tensorflow:сore"
    ],
)

所有东西都链接在一起,但我最终得到了一个大小约为 94 兆字节且不依赖于 libtensorflow_cc.so 的共享库。实际上甚至没有构建 libtensorflow_cc.so 这样的二进制文件。

有一个目标 //tensorflow:libtensorflow_cc.so 。它被声明为 cc_binary 这意味着(根据 bazel)我不能依赖它。而且这个目标实际上是非公开的,这意味着我可以构建它但不能从另一个子项目中引用它。至少有 bazel。

那么,有没有什么办法可以做这么简单的事情呢?

【问题讨论】:

  • 您使用的是什么操作系统? --cpu 标志值(如果有)传递给 Bazel?
  • 我在 Linux 上。没有 --cpu 标志被传递给 Bazel
  • 所以您想将自定义代码构建为依赖于 libtensorflow_cc.so 的共享库?
  • mhlopko,正如你在德语中所说的 - genau )

标签: c++ tensorflow shared-libraries bazel


【解决方案1】:

我无法评论为什么 libtensorflow.so 或 libtensorflow_cc.so 是 :internal。但是你可以在 Bazel 中使用一个技巧来依赖由 cc_binary 创建的共享库:将其声明为 cc 规则的来源。

cc_binary(
    name = "liba.so",
    srcs = [ "a.cc" ],
    linkshared = 1
)

cc_binary(
    name = "main",
    srcs = [ "main.cc", "liba.so" ],
)

现在这是非常不支持的 :) 事实上,我们将在接下来的几个月内改变我们处理共享库的方式,所以我几乎可以向你保证它会崩溃。可以订阅https://github.com/bazelbuild/bazel/issues/1920或关注bazel-dev@进行更新。

【讨论】:

  • # LCM 共享库路径 cc_binary( name = "liblcm.so", srcs = ["lib/liblcm.so"], copts = ["-I/usr/local/lib"], linkopts = ["-pthread"], visibility = ["//visibility:public"], ) 我正在尝试将我的 liblcm.so 包含到我的构建文件中,但 bazel 告诉我我缺少输入文件 lcm/liblcm.所以。我尝试了上面转换它的方法 .cc 文件,但这对我不起作用
  • 这听起来像是一个单独的问题,您可以创建一个问题并提供更多上下文吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-19
  • 2016-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多