CMake, .dll vs .dll.a vs .a: Какую библиотеку я должен указать в конфигурации CMake?

Я работаю над Windows 10 и CMake 3.14.1.

Я сам пытаюсь собрать OpenCV (версия 4.0.1), так как мне нужны модули contrib и модуль SFM. Я скачал готовую версию openBLAS 0.2.19. Он имеет 3 каталога: bin, include и lib. Каталог bin включает libopenblas.dll, include содержит заголовки, а в lib есть libopenblas.a и libopenblas.dll.a (и каталог cmake).

Когда я настраиваю openCV с помощью CMake, я, конечно же, устанавливаю openBLAS_INCLUDE_DIR в каталог include. Но какой файл я должен указать для openBLAS_LIB? libopenblas.dll, libopenblas.a или libopenblas.dll.a?

А позже, когда я создаю openCV (с Visual Studio 2017), где мне разместить .dll, чтобы он был виден процессу сборки?

Изменить: возможно, мне следует добавить, что OpenBLAS был скомпилирован с помощью minGW, поэтому есть эти странные файлы .a и .dll.a вместо .lib


person jiggy    schedule 10.04.2019    source источник


Ответы (1)


Теперь я могу хотя бы частично ответить на свой вопрос. Эти два ответа мне помогли:

https://stackoverflow.com/a/2139061/6793721

https://stackoverflow.com/a/6480464/6793721

Итак, .a файлы обычно представляют собой статические библиотеки Unix, для Windows у нас есть .lib. Поскольку minGW использует GCC, он создает .a библиотеки, но так, чтобы они были совместимы с Visual Studio и MSVC. Итак, я предполагаю, что libopenblas.a - это полная статическая библиотека, а libopenblas.dll.a - это библиотека импорта, которая будет использоваться с libopenblas.dll. Теперь при сборке openCV в CMake я указал libopenblas.dll.a в качестве библиотеки, и все работало (настройка, сборка, установка). Я добавил каталог, в котором находится .dll, в PATH, но я не уверен, нужно ли это делать или это лучший способ сделать это.

person jiggy    schedule 11.04.2019