我正在使用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一样。
那么,有什么方法可以做这么简单的事情吗?
答案 0 :(得分:2)
我无法评论为什么libtensorflow.so或libtensorflow_cc.so是:internal。但是你可以在Bazel中做一个技巧,以便能够依赖cc_binary创建的共享库:将其声明为cc规则的源。
UNION ALL
现在这是非常不受支持的:)事实上,我们将在接下来的几个月内改变我们处理共享库的方式,所以我几乎可以保证它会破坏。您可以订阅https://github.com/bazelbuild/bazel/issues/1920或关注bazel-dev @进行更新。