2017-09-21 44 views
1

我尽量让this example工作,但每次我尝试建立与巴泽尔我收到此错误信息的程序:巴泽尔没有找到tensorflow包C++代码示例

bazel build //code:label_image 
ERROR: /home/jonas/tensorflow/code/BUILD:12:1: no such package 'tensorflow': BUILD file not found on package path and referenced by '//code:label_image'. 
ERROR: /home/jonas/tensorflow/code/BUILD:12:1: no such package 'tensorflow': BUILD file not found on package path and referenced by '//code:label_image'. 
ERROR: /home/jonas/tensorflow/code/BUILD:12:1: no such package 'tensorflow': BUILD file not found on package path and referenced by '//code:label_image'. 
ERROR: /home/jonas/tensorflow/code/BUILD:12:1: no such package 'tensorflow': BUILD file not found on package path and referenced by '//code:label_image'. 
ERROR: /home/jonas/tensorflow/code/BUILD:12:1: no such package 'tensorflow': BUILD file not found on package path and referenced by '//code:label_image'. 
ERROR: Analysis of target '//code:label_image' failed; build aborted. 
INFO: Elapsed time: 1.261s 

我救的确切源代码从github在一个名为code的目录中。我通过pip:pip3 install --upgrade tensorflow在(主动)虚拟环境中安装了tensorflow。我使用arch linux。

为什么bazel找不到合适的包?我对bazel/tensorflow很陌生。这些软件包在哪里保存?我必须在某处明确指定它们吗?

回答

3

通常情况下,从使用Bazel的项目中提取子文件夹并单独构建它不起作用。

如果你看看label_image文件夹的构建文件,你会看到这个定义的C++二进制:

cc_binary(
    name = "label_image", 
    srcs = [ 
     "main.cc", 
    ], 
    linkopts = select({ 
     "//tensorflow:android": [ 
      "-pie", 
      "-landroid", 
      "-ljnigraphics", 
      "-llog", 
      "-lm", 
      "-z defs", 
      "-s", 
      "-Wl,--exclude-libs,ALL", 
     ], 
     "//conditions:default": ["-lm"], 
    }), 
    deps = select({ 
     "//tensorflow:android": [ 
      # cc:cc_ops is used to include image ops (for label_image) 
      # Jpg, gif, and png related code won't be included 
      "//tensorflow/cc:cc_ops", 
      "//tensorflow/core:android_tensorflow_lib", 
      # cc:android_tensorflow_image_op is for including jpeg/gif/png 
      # decoder to enable real-image evaluation on Android 
      "//tensorflow/core/kernels:android_tensorflow_image_op", 
     ], 
     "//conditions:default": [ 
      "//tensorflow/cc:cc_ops", 
      "//tensorflow/core:core_cpu", 
      "//tensorflow/core:framework", 
      "//tensorflow/core:framework_internal", 
      "//tensorflow/core:lib", 
      "//tensorflow/core:protos_all_cc", 
      "//tensorflow/core:tensorflow", 
     ], 
    }), 
) 

此规则告诉巴泽勒什么label_image二进制需要待建。值得注意的是,它有依赖关系(deps)和链接选项(linkopts)指向tensorflow工作空间的根(//tensorflow,由WORKSPACE文件定义),这是从解压缩的子文件夹中缺失的。这就是为什么Bazel抱怨它无法找到包裹tensorflow

构建label_image二进制文件的最简单方法是从tensorflow项目中构建它,因为路径已经建立。

+0

我明白了,谢谢。从github下载完整的项目并在那里运行示例构建,还是需要事先构建一些东西才能使其工作? – Jonas

+0

是的,如果您还没有,请按照自述文件中特定于Tensorflow的附加步骤下载模型定义。 – Jin