2017-09-21 54 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