linux系統下C語言調用lapack ,blas庫


在利用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語言中的矩陣是按行存儲的。編程序的時候一定要記住這點

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM