CMake,.dll与.dll.a与.a:我应该在CMake配置中指定哪个库?

时间:2019-04-10 10:50:40

标签: opencv cmake openblas

我正在使用Windows 10和CMake 3.14.1。

我正在尝试自己构建OpenCV(版本4.0.1),因为我需要contrib模块和SFM模块。我下载了openBLAS 0.2.19的预构建版本。它具有3个目录: bin include lib 。 bin目录包括libopenblas.dll,包括头文件,在lib中有libopenblas.a和libopenblas.dll.a(以及cmake目录)。

当我使用CMake配置openCV时,我当然将openBLAS_INCLUDE_DIR设置为包含目录。但是我应该为openBLAS_LIB指定哪个文件? libopenblas.dll,libopenblas.a或libopenblas.dll.a?

然后在构建openCV(使用Visual Studio 2017)时,应该将.dll放在哪里,以便构建过程可以看到它?

编辑:也许我应该补充一点,OpenBLAS是使用minGW编译的,这就是为什么存在那些奇怪的.a和.dll.a文件而不是.lib

的原因。

1 个答案:

答案 0 :(得分:0)

我现在至少可以部分回答我的问题。这两个答案对我有帮助:

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

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

因此.a文件通常是Unix静态库,对于Windows,我们有.lib。由于minGW使用GCC,因此会生成.a库,但是它们与Visual Studio和MSVC兼容。因此,我猜想libopenblas.a是完整的 static 库,而libopenblas.dll.a是要与libopenblas.dll一起使用的 import 库。 现在,当构建openCV时,在CMake中,我指定了libopenblas.dll.a作为库,并且一切正常(配置,构建,安装)。我确实将.dll所在的目录添加到PATH中,但是我不确定是否需要这样做或者是执行此操作的最佳方法。