我在我的项目中使用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;
}
答案 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)
试试吧。它可以改进,但应该让你开始。