CMake, .dll против .dll.a против .a: Какую библиотеку я должен указать в конфигурации CMake? - PullRequest
1 голос
/ 10 апреля 2019

Я работаю на 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 в каталог включения.Но какой файл я должен указать для openBLAS_LIB?libopenblas.dll, libopenblas.a или libopenblas.dll.a?

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

Редактировать: Может быть, я должен добавить, что OpenBLAS был скомпилирован с minGW, поэтому вместо .lib

есть такие странные файлы .a и .dll.a

1 Ответ

0 голосов
/ 11 апреля 2019

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

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 - это import библиотека, которая будет использоваться с libopenblas.dll. Теперь при сборке openCV в CMake я указал libopenblas.dll.a в качестве библиотеки и все заработало (настройка, сборка, установка). Я добавил каталог, в котором находится .dll, к PATH, но я не уверен, нужно ли это делать или это лучший способ сделать это.

...