繁体   English   中英

Tensorflow:与共享库的动态链接

[英]Tensorflow: dynamic linking with shared library

我正在做一个使用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在一起。

那么,有什么方法可以做这么简单的事情吗?

我无法评论为什么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 @进行更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM