Tensorflow:与共享库动态链接

Tensorflow: dynamic linking with shared library

本文关键字:动态 链接 共享 Tensorflow      更新时间:2023-10-16

我正在做一个使用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,这意味着(根据巴泽尔的说法)我不能依赖它。而且这个目标实际上是非公共的,这意味着您可以构建它,但不能从另一个子项目引用它。至少和巴泽尔在一起。

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

我无法评论为什么libtensorflow.so或libtensorflow_cc.so是内部的。但是,在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@进行更新。