OSX Tensorflow + Opencv:未找到符号,预计在Flat Namespace中

时间:2016-10-26 09:57:31

标签: opencv bazel

我使用OSX10.12,我尝试在tensorflow中使用OpenCV,我使用了这个question中提到的第一种方法。

我成功构建了我的代码,但执行时有一些问题如下:

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 个答案:

答案 0 :(得分: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. linux - &gt; * .so,
  2. windows - &gt; * .dll,和
  3. on OSx - &gt; *名为.dylib
  4. 即便如此,如果您遇到任何问题,请设置DYLD_PRINT_LIBRARY环境变量以检查是否链接了正确的库,有时不同版本的库可能会让您忙碌。