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

时间: 2024-10-08 03:38:11

linux系统下C语言调用lapack ,blas库的相关文章

Linux系统下C语言如何调用scalapack中的函数

在并行计算中经常需要调用scalapck(并行化的lapack)函数库里面的函数进行编程,这里简单介绍在C语言如何调用scalapck中的矩阵向量乘的函数. 注意:scalapack中的函数是用fortran写的,矩阵是按列进行存储的. scalapack的链接需要用到blas,因此确保本机上安装好了blas.gfortran 下面是一个矩阵向量乘法的例子(为了简单计算,该程序中设定进程数为4): #include <stdio.h> #include <string.h> #in

Linux系统下安装ncurses库

ncurses库是一个Linux系统下的图形支持的函数库,字符终端处理库,包括面板和菜单. 今天在安装ncurses库的时候遇到了一些问题,现将遇到的问题所叙如下: 首先说明:本次安装采用的是源码包的安装方式,并没有直接使用一键命令的方式,并不是源码包安装方式有多牛逼,只是实在是我的虚拟机连不上外网. 1.下载ncurses库源码压缩包 大家可以去这个网址下载:http://ftp.gnu.org/pub/gnu/ncurses/ 版本的新旧差别不大,本次我选用的是ncurses-5.6版本 2

LINUX下c语言调用math.h库函数的注意事项

在Ubuntu上做C语言程序练习时,用到了sqrt函数,尽管在源文件中已包含了math.h头文件,但在编译的时候总是提示sqrt未定义.后来在网上查阅了相关资料,得知:在Linux系统下,C源文件若调用了math库里的函数,则编译时要加上-lm(是字母l,不是数字1),表示链接到math库.例如编译调用了math库函数的C源文件foo.c,可以用如下命令对其进行编译: $gcc -o foo -g -W foo.c -lm

LINUX系统下Java和Scala的环境配置

LINUX系统下Java和Scala的环境配置 最近,笔者在研究一个有关“自然语言处理”的项目,在这个项目中,需要我们用Spark进行编程.而Spark内核是由Scala语言开发的,所以在使用Spark之前,我们必须配置好Scala,而Scala又是运行在JVM上的,所以在配置Scala之前,先要配置好JDK.下面是我个人的一些总结. 我是在Win7系统下开的虚拟机,虚拟机的系统是CentOS7,在创建虚拟机完成后,它会自带一个OpenJDK,我的版本是这样的: 但是因为最开始不了解这个情况,所

64位linux系统下编译int32_t

在64位Linux系统下编译执行一下程序输出结果为 40 8 #include <stdio.h> #include <stdlib.h> #include <stdint.h> void print_size(int32_t array[10]){ printf("%ld\n",sizeof(array)); } int main() { int32_t myarray[10]; printf("%ld\n",sizeof(my

Linux系统下吉林快-三平台开发环境搭建以及关于变量的基本操作

有问题联系Q1446595067吉林快-三平台开发, 是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python是纯粹的自由软件, 源代码和解释器CPython遵循 GPL(GNU General Public License)协议.Python语法简洁清晰,特色之一是强制用空白符(white space)作为语句缩进. Python具有丰富和强大的库.它常被昵称为胶水语言,能够把用其他语言制作的各种模块(

linux系统下,11款常见远程桌面控制软件

linux系统下,11款常见远程桌面控制软件 一. Grdc 它是一个用GTK+编写的,适用于gnome桌面环境的远程桌面访问软件.看图: 常见功能: 1.提供全屏,窗口化的远程控制.支持高分辨率下的窗口显示以及调整. 2.可浮动的工具栏 3.可抓取键盘 4.支持建立一个“常用访问列表” 5.连接快速,高效 6.全屏模式下,当鼠标划过屏幕边缘时自动滚动 7.全屏模式下工具栏同样支持浮动效果,可直接进行例如模式切换,键盘抓取最小化等常见操作. 8. rdesktop 支持RDP协议, 9. 支持

Linux系统下基本命令

<Linux系统下基本命令> Linux系统下基本命令: 要区分大小写 uname 显示版本信息(同win2K的 ver) dir 显示当前目录文件,ls -al 显示包括隐藏文件(同win2K的 dir) pwd 查询当前所在的目录位置 cd cd ..回到上一层目录,注意cd 与..之间有空格.cd /返回到根目录. cat 文件名 查看文件内容 cat >abc.txt 往abc.txt文件中写上内容. more 文件名 以一页一页的方式显示一个文本文件. cp 复制文件 mv 移

Linux系统下用户与组的管理

Linux系统下用户与组的管理 一.用户及组基本概述 Linux 系统上,用户管理是基于用户名和密码的方式进行资源的分配. 1.uid(用户身份标识) (1)root用户 uid为0 (2)普通用户:1--65535 系统用户 系统已经已经存在专门用来对系统服务或者系统资源进行管理的 1--499(CentOS 6.X) 1--999 (CentOS 7.X) 登录用户(平时专门做系统管理的用户) 500+ (CentOS 6.X) 1000+ (CeentOS 7.X) 2.gid(用户组身份