我假设我的Debian与您的CentOS足够接近,这些技巧可以奏效...
1)检查您的计算机上是否安装了LAPACKE。
- 您可以搜索像
/usr/include
、/usr/local/include
这样的位置,查找文件lapacke.h
、lapacke_config.h
、lapacke_mangling.h
、lapacke_mangling_with_flags.h
和lapacke_utils.h
。
- 您可以搜索像
/usr/lib
或/usr/local/lib
这样的位置,查找静态库lapacke.a
或动态库lapacke.so
或lapacke.so.3
。
如果缺少这些文件,请考虑安装liblapacke
和liblapacke-dev
软件包。或者,(特别是如果您没有root权限),您可以在http://www.netlib.org/lapack/#_lapack_version_3_6_1下载netlib的lapack和lapacke源代码。要编译LAPACKE,请将make.inc.example
重命名为make.inc
,然后键入:
make
make lapackelib
包含文件位于
lapack-3.6.1/LAPACKE/include
,库位于
lapack-3.6.1
。使用
gcc
和
gfortran
可以方便地从头重新编译lapack和lapacke。
2) 让我们编译一个基于
这个例子的简单代码:
#include <iostream>
#include <string>
#include <fstream>
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <lapacke.h>
#include "mpi.h"
void print_matrix_rowmajor(const char* desc, lapack_int m, lapack_int n, double* a, lapack_int lda );
int main(int argc, char *argv[])
{
MPI_Init(&argc,&argv);
std::cout << "Start..." << std::endl;
double A[5][3] = {1,1,1,2,3,4,3,5,2,4,2,5,5,4,3};
double b[5][2] = {-10,-3,12,14,14,12,16,16,18,16};
lapack_int info,m,n,lda,ldb,nrhs;
m = 5;
n = 3;
nrhs = 2;
lda = 3;
ldb = 2;
print_matrix_rowmajor( "Entry Matrix A", m, n, *A, lda );
print_matrix_rowmajor( "Right Hand Side b", n, nrhs, *b, ldb );
printf( "\n" );
printf( "LAPACKE_dgels (row-major, high-level) Example Program Results\n" );
info = LAPACKE_dgels(LAPACK_ROW_MAJOR,'N',m,n,nrhs,*A,lda,*b,ldb);
print_matrix_rowmajor( "Solution", n, nrhs, *b, ldb );
printf( "\n" );
std::cout << "info = " << info << std::endl;
std::cout << "Done :-) !!!" <<std::endl;
MPI_Finalize();
return 0;
}
void print_matrix_rowmajor(const char* desc, lapack_int m, lapack_int n, double* a, lapack_int lda )
{
lapack_int i, j;
printf( "\n %s\n", desc );
for( i = 0; i < m; i++ )
{
for( j = 0; j < n; j++ )
{
printf( " %6.2f", a[i*lda+j]);
}
printf( "\n" );
}
}
编译的命令为:
mpiCC main.cpp -o main -llapacke -llapack -lblas -lm -Wall
如果包含文件在特定文件夹中,请使用
-I/usr/pathtolapackedoth
。同样,如果库在特定文件夹中,请尝试
-L/usr/lib/pathtoliblapackedota
。
根据MPICH2的安装方式,
mpiCC
很可能会包装g++。您可以输入
mpiCC --version
来了解更多信息。要使用2个进程运行它:
mpirun -np 2 main
最后,您不需要在CentOS机器上安装GNU Fortran才能使用LAPACK(LAPACKE)编译/链接/运行C ++。实际上,只有在您希望从头重新编译LAPACK时才需要它。
extern "C"{#include "lapacke.h"}
?请参考https://dev59.com/M3A75IYBdhLWcg3wYH7I。 - francis#include <complex.h>
,你能否尝试改为#include <complex>
(如果你使用这个)?另请参见https://dev59.com/An_aa4cB1Zd3GeqP1Eg9:它可能有助于理解问题。 - francis