2016-10-26 10 views
1

Я использую OSX10.12, я пытаюсь использовать OpenCV в тензорном потоке, я использую первый метод, упомянутый в этом question.OSX Tensorflow + Opencv: символ не найден, ожидаемый в пространстве пространств с пробелами

Я строю свой код успешно, но есть некоторые вопросы, как следующие, когда я выполняю его:

dyld: lazy symbol binding failed: Symbol not found: __ZN2cv6String8allocateEm 
Referenced from: /Users/philokey/Practice/github/tensorflow/./bazel-bin/tensorflow/examples/test_cv/test_cv 
Expected in: flat namespace 

Билд файл выглядит следующим образом:

cc_binary(
name = "test_cv", 
srcs = [ 
    "test_cv.cc", 
], 
deps = [ 
    "@opencv//:opencv", 
], 
) 

Как я могу решить эту проблему?

ответ

1

Вы должны убедиться, что вы обновляются следующие файлы в каталоге tensorflow, правильно:

в WORKSPACE - (./tensorflow/tensorflow/WORKSPACE) добавить следующее:

new_local_repository(
    name = "opencv", 
    path = "/usr/local/", 
    build_file = "opencv.BUILD", 
) 

opencv.BUILD - (./tensorflow/tensorflow/opencv.BUILD) добавить следующее:

cc_library(
    name = "opencv", 
    srcs = glob(["lib/*.dylib*"]),   <<<<<<< 
    hdrs = glob(["include/**/*.hpp"]), 
    includes = ["include"], 
    visibility = ["//visibility:public"], 
    linkstatic = 1, 
) 

[Примечание] для различных операционных систем, различные динамические библиотеки создаются, например:

  1. линукс -> * .so,
  2. окна -> * .dll и
  3. на OSx -> * .dylib

Даже тогда, если вы сталкиваетесь любые проблемы, пожалуйста, установите DYLD_PRINT_LIBRARY переменную среды, чтобы проверить, связаны ли правильные библиотеки, иногда разные версии библиотек могут держать вас занятыми.