在利用C语言编程,经常调用其他的软件包,其中lapack,blas库是最常用的两个库,这里讲下在linux系统下,C语言编程如何调用这两个库:
1.首先讲下blas库的调用,这里以两个向量内积函数为例:
#include #include
double ddot_(int *,double *,int *,double *,int *);intmain()
{int N=2, INCX=1, INCY=1;double X[2]={1.0,1.0};double Y[2]={2.0,2.0};doublere;
re=ddot_(&N, X, &INCX, Y, &INCY);
printf("the result is:%f", re);return 0;
}
编译生成目标文件:
gcc -c testddot.c -o testddot.o
生成可执行文件:
gcc -o testddot testddot.o -lblas -lgfortran
得到结果:
the result is:4.000000
注意到:blas库是用gfortran写的,因此需要用到gfortran库来生成可执行文件,且需要链接blas库的路径,由于我把blas库放在了系统默认路径下,因此这里只需要-lblas即可,否则,需要写出blas库的路径。
2.下面讲下lapack库的调用方法,这里以求解线性方程组为例子。
#include #include"lapacke.h"
#define M 2
#define N 2
intmain()
{int i, j, n=N, m=M;intinfo, IPIV[N];double A[M * N]= { 1, 2, 4, 2};double B[M*N] = {5, 4, 2.5, 2};
dgesv_(&n, &n, A, &n, IPIV, B, &n, &info);for(j=0; j< 2*N ;j++)
printf("%f", B[j]);
printf("");return 0;
}
编译生成目标文件:
gcc -o test_dgesv.o -c test_dgesv.c
生成可执行文件:
gcc -o test_dgesv test_dgesv.o -llapack -lblas -lm -lgfortran
运行程序:
./test_dgesv
结果如下:
1.000000 1.000000 0.500000 0.500000
注意:blas和lapack中的代码都是基于fortran来写的,fortran中的矩阵是按列存储,而C语言中的矩阵是按行存储的。编程序的时候一定要记住这点