Bazel使用tensorflow或仅使用tbb作为外部依赖项具有“ Make”变量未定义错误

问题描述

我有一个c ++项目,使用bazel作为构建工具并使用tensorflow作为外部依赖项,bazel版本为0.24.1,而tensorflow版本为1.14.0,它工作正常(在我的项目中,我在tensorflow中使用tbb作为淡褐色的规则)。 但是,当我将bazel更新为3.1.0并将tensorflow更新为2.3.0时,出现错误

ERROR: external/tbb/BUILD.bazel:11:1: in cmd attribute of genrule rule @tbb//:build_tbb: $(AR) not defined

我的WOKSPACE文件

http_archive(
  name = "org_tensorflow",strip_prefix = "tensorflow-2.3.0",sha256 = "2595a5c401521f20a2734c4e5d54120996f8391f00bb62a57267d930bce95350",urls = ["https://github.com/tensorflow/tensorflow/archive/tensorflow-2.3.0.tar.gz"]
)

我的构建文件

cc_library(
    name = "tf_utils",srcs = ["tf_utils.cpp"],hdrs = ["tf_utils.h"],deps = ["@org_tensorflow//tensorflow/cc/saved_model:loader","utils"],visibility = ["//visibility:public"]
)

cc_library(
    name = "utils",hdrs = ["utils.h"],srcs = ["utils.cpp"],deps = ["@boost//:filesystem","@eigen_archive//:eigen","@tbb//:tbb",],# I use the tbb in the tensorflow
    visibility = ["//visibility:public"]
)

问题,我在tensorflow项目本身中测试了tbb,它具有相同的错误。 我的测试方法是在tensorflow / BUILD中编写遵循c ++规则:

cc_library(
     name = "test-tbb",srcs = ["test.cpp"],deps = ["@ngraph_tf//:ngraph_tf"] # ngraph_tf's deps has tbb
)

后执行bazel build //tensorflow:test-tbb,它具有相同的错误@tbb//:build_tbb: $(AR) not defined

第二,我认为问题可能出在tbb。我通过两种方式测试tbb:

  1. 我下载了tbb的源代码,并在tbb的根目录中创建了WORKSPACE(空)和BUILD(仅将tbb.BUILD重命名为BUILD),然后在bazel版本为0.24时执行bazel build //:build_tbb。 1,没事,但是将bazel版本更改为3.1.0时出现上述错误
  2. 一个小型项目中,我仅将tbb用作外部依赖项,而WORKSPACE具有一个名为tbb的http_archive,它的build_file指向tbb.BUILD。我在BUILD flie中编写了一个cc_library,它的deps = [“ @tbb:build_tbb”],测试结果与1)相同,当bazel版本为0.24.1可以,则3.1.0损坏了。

tbb.BUILD我使用了:https://github.com/tensorflow/tensorflow/blob/r2.3/third_party/ngraph/tbb.BUILD

第三,我遵循bazel(https://docs.bazel.build/versions/master/be/make-variables.html#custom_variables)的文档,在tbb规则“ build_tbb”中设置工具链= [“ @ bazel_tools // tools / cpp:current_cc_toolchain”] .BUILD,则错误消息是“在genrule规则的cmd属性中//:build_tbb: $(CC_FLAGS)未定义”。

第四,我遵循问题​​的解决方法:https://github.com/rnburn/satyr/issues/2,更新tbb.BUILD文件,然后重试,错误消息是“在规则@tbb //:build_tbb的cmd属性中: $(C_COMPILER)未定义”。

我只想使用tensorflow作为外部依赖关系,并在tensorflow中使用bazel目标“ tbb”语句(由于它位于tensorflow中,所以我不想重新编译多次)

有人知道如何正确地使用tensorflow和tbb作为使用 bazel 3.0.0 + 的外部依赖项吗?谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...