c++ - Tensorflow:与共享库的动态链接

标签 c++ tensorflow shared-libraries bazel

我正在做一个使用 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@ 获取更新。

关于c++ - Tensorflow:与共享库的动态链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43075683/

相关文章:

c++ - Eigen :修改稀疏矩阵的三元组列表,而不是使用 coeffRef

c++ - 如何检查日期格式的有效性(例如,%d/%m/%Y-%H :%M:%S)?

c++ - 将字符串解析为 C++ 中的一行代码

c++ - 在qt中使用窗口消息

python - 从非最终 keras 模型层获取输出

python - 有没有办法在 tensorflow 中的张量点操作中广播张量?

tensorflow - 从 RNN 单元获取权重和偏差值

g++ - 如何告诉 c++ 链接器某些类稍后将由 dlopen 添加

c++ - ldd 输出静态链接到共享库

grails - 如何使用共享jar在Tomcat 8中部署多个Grails 3.x应用程序?