【问题标题】:CMake, .dll vs .dll.a vs .a: What library should I specify in the CMake configuration?CMake、.dll vs .dll.a vs .a:我应该在 CMake 配置中指定什么库?
【发布时间】:2019-04-11 17:57:22
【问题描述】:

我正在使用 Windows 10 和 CMake 3.14.1。

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

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

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

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

【问题讨论】:

    标签: opencv cmake openblas


    【解决方案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 是完整的static 库,libopenblas.dll.a 是与libopenblas.dll 一起使用的import 库。 现在,在构建 openCV 时,我在 CMake 中将 libopenblas.dll.a 指定为库,并且一切正常(配置、构建、安装)。我确实将.dll 所在的目录添加到了PATH,但我不确定是否需要这样做或者是最好的方法。

    【讨论】:

      猜你喜欢
      • 2022-12-09
      • 1970-01-01
      • 2022-07-05
      • 2018-03-16
      • 2020-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-02
      相关资源
      最近更新 更多