如何在我的 Qt 项目中添加 BLAS_LIB?

How to add BLAS_LIB in my Qt project?

我在我的项目中使用 BLAS_LIB 来执行矩阵乘法。这是我的CMakelist.txt。它缺少 BLAS_LIB 和 BLAS_INCLUDE 文件的路径。我认为这是以下错误的原因。如果是正确的原因,请帮我解决一下?

这是我的 CMakeList

cmake_minimum_required(VERSION 2.6)
project(testconv)
if(UNIX)
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=gnu++0x")
endif()
add_executable(testconv main.cpp)

install(TARGETS testconv RUNTIME DESTINATION bin)

这是错误

/home/projects/TestConv/main.cpp:24: undefined reference to `cblas_dgemm'

这是我的cpp文件

#include <iostream>
#include <random>
#include <cblas.h>
int main ( int argc, char* argv[] ) {
    //Random numbers
    std::mt19937_64 rnd;
    std::uniform_real_distribution<double> doubleDist(0, 1);

    //Create Arrays that represent the matrices A,B,C
    const int n = 20;
    double*  A = new double[n*n];
    double*  B = new double[n*n];
    double*  C = new double[n*n];

    //Fill A and B with random numbers
    for(uint i =0; i <n; i++){
        for(uint j=0; j<n; j++){
            A[i*n+j] = doubleDist(rnd);
            B[i*n+j] = doubleDist(rnd);
        }
    }

    //Calculate A*B=C
    cblas_dgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, n, n, n, 1.0, A, n, B, n, 0.0, C, n);

    //Clean up
    delete[] A;
    delete[] B;
    delete[] C;

    return 0;
}

是的,您完全忘记了包含 BLAS 库。
对于您的 CMake 版本,CMake 包含一个 FindBLAS.cmake 文件,该文件不适用于您的情况。 您将需要 FindCBLAS.cmake 来正确找到 BLAS 的 C 接口,就像在其他开源项目中所做的那样。
例如,您可以获取以下 https://github.com/Eyescale/CMake/blob/master/FindCBLAS.cmake.
首先,您需要在项目根目录(不是构建目录!!!)中创建一个名为 cmake 的目录,然后复制我刚才提到的那个文件 (FindCBLAS.cmake).
您需要在以下方面修改您的 CMakeLists.txt

cmake_minimum_required(VERSION 2.6)
project(testconv)
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake)
find_package(CBLAS REQUIRED)
include_directories(${CBLAS_INCLUDE_DIR})
if(UNIX)
    SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -std=gnu++0x")
endif()
add_executable(testconv main.cpp)
target_link_libraries(testconv ${CBLAS_LIBRARIES})
install(TARGETS testconv RUNTIME DESTINATION bin)  

试试看。它可以改进,但应该让你开始。