zoukankan      html  css  js  c++  java
  • 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
    ", 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	", 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语言中的矩阵是按行存储的。编程序的时候一定要记住这点

  • 相关阅读:
    [内核编程] 串口过滤
    大数问题(高精度运算)
    [内核编程] 实战调试,第一个内核程序
    [内核编程] Windebug双机调试环境搭建
    树状数组
    mysql常用语句
    解决maven工程无法创建src/main/java包名的方法
    java Date中方法toLocaleString过时的替代方案
    Eclipse 无法编译,提示“错误: 找不到或无法加载主类”
    Eclipse如何设置编译文件.class输出路径
  • 原文地址:https://www.cnblogs.com/kuangsyx/p/7515979.html
Copyright © 2011-2022 走看看