【问题标题】:Adding Armadillo to Qt project将犰狳添加到 Qt 项目
【发布时间】:2015-06-08 16:02:07
【问题描述】:

我正在尝试对已下载的 Armadillo 库 (5.2) 运行测试,并且我已取消注释 config.hpp 文件中的 ARMA_USE_LAPACKARMA_USE_BLAS 行,如 Windows here 推荐的那样。我已将 .pro 文件设置为这样

QT       += core

QT       -= gui

TARGET = armatest
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app

SOURCES += \
    main.cpp

INCLUDEPATH += C:\Armadillo\include

LIBS += -LC:\Armadillo\lib_win64
    -llapack_win64_MT
    -lblas_win64_MT

考虑到lapack_win64_MT.libblas_win64_MT.lib 是位于C:\Armadillo\lib_win64\ 中的库

我不断收到的错误是

undefined reference to 'dgetrf_'
undefined reference to 'ddot_'
undefined reference to 'dgemv_'

等等。好像我没有正确链接库。我错过了什么?

我使用 MinGW 4.9.1 作为编译器

【问题讨论】:

    标签: c++ qt gcc linker armadillo


    【解决方案1】:

    您缺少 LAPACK 和 BLAS 来提供实际的基础线性代数运算。

    这记录在Armadillo FAQ 等其他地方。您可能需要为您的系统重新安装或重建犰狳;它不附带 LAPACK 和 BLAS。

    我的首选方法是构建一个独立的 Armadillo 测试程序(也许您已经拥有),为 Qt 构建一个 - 然后尝试加入构建说明。

    编辑:你正在为混合 MinGW 和 VC++ 的常见问题而堕落。犰狳网站清楚地表明

    出于礼貌,Armadillo 包包含预编译的 64 位版本的 LAPACK 和 BLAS,以及用于编译示例程序的 MSVC 项目文件。 MSVC 项目文件在 64 位 Windows 7 和 Visual C++ 2012 上进行了测试。您可能需要对更高版本的 Windows 和/或编译器进行调整。

    这对 MinGW 没有帮助。您需要找到自己的 MinGW 编译的 LAPACK 和 BLAS。

    【讨论】:

    • 实际上我已经下载了包含 LAPACK 和 BLAS 库的犰狳。我已按照我发布的链接中建议的所有步骤进行操作,我认为不需要实际安装 Armadillo,但也许我错了。
    • 嗯。我从不在 Windows 上独立使用它,所以它可能随库一起提供。不过,您需要检查的是 Qt 和 Armadillo 期望相同的编译器。
    • 更新了我的答案——你的问题确实是 VC++ 和 MinGW 的混合。您需要找到自己的 MinGW 编译的 LAPACK 和 BLAS。
    • 好的,我正在慢慢解决这个问题。虽然我的机器是 64 位的,但 Mingw 是 32 位的,所以我加载了错误的库。我设法通过 Code::blocks 为 lapack 和 blas 加载 32 位库来使其工作。在 qt creator 上,即使我更改了库,我仍然有同样的错误(而且我使用的是相同的代码块编译器!)。
    【解决方案2】:

    问题有两个原因

    库是 x64,我的编译器是 32 位的(即使我的机器是 x64)

    LIBS 路径必须用反斜杠书写

    LIBS += \
        -LC:\Armadillo\lib32 \
        -lliblapack \
        -llibblas
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-28
      • 2013-10-20
      • 1970-01-01
      • 1970-01-01
      • 2014-02-27
      • 2010-10-14
      • 2015-10-16
      • 2012-04-27
      相关资源
      最近更新 更多