在利用C语言编程,经常调用其他的软件包,其中lapack,blas库是最常用的两个库,这里讲下在linux系统下,C语言编程如何调用这两个库:
1.首先讲下blas库的调用,这里以两个向量内积函数为例:
#include <stdio.h> #include <math.h> double ddot_(int *,double *,int *,double *,int *); int main() { int N=2, INCX=1, INCY=1; double X[2]={1.0,1.0}; double Y[2]={2.0,2.0}; double re; re=ddot_(&N, X, &INCX, Y, &INCY); printf("the result is:%f\n", 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 <stdio.h> #include"lapacke.h" #define M 2 #define N 2 int main() { int i, j, n=N, m=M; int info, 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\t", B[j]); printf("\n"); 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语言中的矩阵是按行存储的。编程序的时候一定要记住这点
时间: 2024-10-08 03:38:11