将 Armadillo 添加到 Qt 项目

Adding Armadillo to Qt project

我正在尝试 运行 对我下载的 Armadillo 库 (5.2) 进行测试,并且我取消了 [=14= 中 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 作为编译器

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

这在 Armadillo FAQ 和其他地方都有记载。您可能需要为您的系统重新安装或重建 Armadillo;它不随 LAPACK 和 BLAS 一起提供。

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

编辑: 您陷入了混合 MinGW 和 VC++ 的常见问题。犰狳网站清楚地说

As a courtesy, the Armadillo package contains pre-compiled 64 bit versions of LAPACK and BLAS, as well as MSVC project files to compile the example programs. The MSVC project files were tested on 64 bit Windows 7 with Visual C++ 2012. You may need to make adaptations for later versions of Windows and/or the compiler.

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

问题有两个原因

库是 x64 的,我的编译器是 32 位的(尽管我的机器是 x64)

LIBS 路径必须用反斜杠书写

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