Сборка OpenCV в приложении MacOS с помощью Bazel (файлы .dylib vs .a) - PullRequest
1 голос
/ 01 мая 2020

Я создаю простое приложение C ++ на macOS с помощью Bazel. Я хочу использовать OpenCV в своем приложении. Я установил OpenCV с brew install opencv и следовал Создание кода OpenCV с использованием Bazel для создания моей установки.

В моем файле WORKSPACE у меня есть:

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

В мой файл opencv.BUILD, у меня есть:

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

В моем файле BUILD у меня есть:

cc_library(
    name = "lib",
    srcs = ["hello.cpp"],
    deps = [
        "@opencv//:opencv",
    ],
)

Это работает до тех пор, пока цель opencv принимает OpenCV .dlyb файлы (srcs = glob(["lib/*.dylib"])).

Но теперь я хочу встроить библиотеки OpenCV статически в мой двоичный файл. Когда я изменяю цель opencv на файлы .a OpenCV (srcs = glob(["lib/*.a"])), я получаю кучу ошибок Undefined symbols о классах AVFoundation. В моем коде я использую OpenCV Capture API (который, я полагаю, использует AVFoundation под капотом), так что это своего рода имеет смысл, но я не уверен, как это исправить.

Как мне настроить цели Bazel встроить OpenCV статически в мой бинарный файл?

...