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

时间:2017-01-25 10:38:51

标签: c++ qt cmake blas

我在我的项目中使用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;
}

1 个答案:

答案 0 :(得分:1)

是的,您完全忘记包含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)  

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