码迷,mamicode.com
首页 > 编程语言 > 详细

linux系统下C语言调用lapack ,blas库

时间:2017-09-13 20:27:19      阅读:234      评论:0      收藏:0      [点我收藏+]

标签:例子   linux系统   链接   pack   main   方法   调用   运行程序   test   

在利用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语言中的矩阵是按行存储的。编程序的时候一定要记住这点

 

linux系统下C语言调用lapack ,blas库

标签:例子   linux系统   链接   pack   main   方法   调用   运行程序   test   

原文地址:http://www.cnblogs.com/kuangsyx/p/7515979.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!