在利用C语言编程,经常调用其他的软件包,其中lapack,blas库是最常用的两个库,这里讲下在linux系统下,C语言编程如何调用这两个库:

1.首先讲下blas库的调用,这里以两个向量内积函数为例:

#include <stdio.h>
#include <math.h>
double ddot_(int *,double *,int *,double *,int *);
int main()
{
int N=, INCX=, INCY=;
double X[]={1.0,1.0};
double Y[]={2.0,2.0};
double re;
re=ddot_(&N, X, &INCX, Y, &INCY);
printf("the result is:%f\n", re);
return ;
}

编译生成目标文件:

 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]= { , , , };
double B[M*N] = {, , 2.5, }; dgesv_(&n, &n, A, &n, IPIV, B, &n, &info);
for(j=; j< *N ;j++)
printf("%f\t", B[j]);
printf("\n"); return ;
}

编译生成目标文件:

 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库的更多相关文章

  1. 如何查看Linux系统下程序运行时使用的库?

    Linux系统下程序运行会实时的用到相关动态库,某些场景下,比如需要裁剪不必要的动态库时,就需要查看哪些动态库被用到了. 以运行VLC为例. VLC开始运行后,首先查看vlc的PID,比如这次查到的V ...

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

    在并行计算中经常需要调用scalapck(并行化的lapack)函数库里面的函数进行编程,这里简单介绍在C语言如何调用scalapck中的矩阵向量乘的函数. 注意:scalapack中的函数是用for ...

  3. Linux系统下C语言程序的构建过程

    本文转载自:http://www.ruanyifeng.com/blog/2014/11/compiler.html 源码要运行,必须先转成二进制的机器码.这是编译器的任务. 比如,下面这段源码(假定 ...

  4. 解决Linux系统下程序找不到动态库的方法

    思路:一般来说,通过make命令已经将程序依赖的动态库编译出来了,通过make install命令已经将动态库安装到系统的某个路径下.找没找到动态库就看这个路径是否包含在系统默认搜索动态库的路径中,如 ...

  5. 实验四 Linux系统搭建C语言编程环境

    项目 内容 这个作业属于那个课程 <班级课程的主页链接> 这个作业的要求在哪里 <作业要求链接地址> 学号-姓名 17043220-万文文 作业学习目标 1).Linux系统下 ...

  6. Linux系统下安装ncurses库

    ncurses库是一个Linux系统下的图形支持的函数库,字符终端处理库,包括面板和菜单. 今天在安装ncurses库的时候遇到了一些问题,现将遇到的问题所叙如下: 首先说明:本次安装采用的是源码包的 ...

  7. Linux系统下安装Redis和Redis集群配置

    Linux系统下安装Redis和Redis集群配置 一. 下载.安装.配置环境: 1.1.>官网下载地址: https://redis.io/download (本人下载的是3.2.8版本:re ...

  8. linux系统下的权限知识梳理

    下面对linux系统下的有关权限操作命令进行了梳理总结,并配合简单实例进行说明.linux中除了常见的读(r).写(w).执行(x)权限以外,还有其他的一些特殊或隐藏权限,熟练掌握这些权限知识的使用, ...

  9. Linux系统下fd分配的方法

    最近几天在公司里写网络通讯的代码比较多,自然就会涉及到IO事件监测方法的问题.我惊奇的发现select轮训的方法在那里居然还大行其道.我告诉他们现在无论在Linux系统下,还是windows系统下,s ...

随机推荐

  1. Linux(7)chmod解析

    在UNIX和Linux的操作系统中, 每个文件(文件夹也被看作是文件)都按读, 写, 运行设定权限 比如用ls -l或ll命令列文件表时, 得到如下输出: -rw-r--r-- 1 apple use ...

  2. python教程6-2:字符串标识符

    标识符合法性检查. 1.字母或者下划线开始. 2.后面是字母.下划线或者数字. 3.检查长度大于等于1. 4.可以识别关键字. python35 idcheck.py  idcheck.py impo ...

  3. 详解Tomcat 配置文件server.xml

    前言 Tomcat隶属于Apache基金会,是开源的轻量级Web应用服务器,使用非常广泛.server.xml是Tomcat中最重要的配置文件,server.xml的每一个元素都对应了Tomcat中的 ...

  4. 再起航,我的学习笔记之JavaScript设计模式05(简单工程模式)

    我的学习笔记是根据我的学习情况来定期更新的,预计2-3天更新一章,主要是给大家分享一下,我所学到的知识,如果有什么错误请在评论中指点出来,我一定虚心接受,那么废话不多说开始我们今天的学习分享吧! 前几 ...

  5. java 远程调用 RPC

    1. 概念 RPC,全称为Remote Procedure Call,即远程过程调用,它是一个计算机通信协议.它允许像调用本地服务一样调用远程服务.它可以有不同的实现方式.如RMI(远程方法调用).H ...

  6. nodejs 文件读取一行

    作者QQ:1095737364    QQ群:123300273     欢迎加入!   废话没有,直接上代码: app.get('/company', function (req, res, nex ...

  7. Ubuntu下OpenCV不能被某个python版本识别

    Ubuntu下OpenCV不能被某个python版本识别 Solution: 可以进入相应版本的python,查看该python的path: python import sys print(sys.p ...

  8. 熟悉JS中的常用选择器及属性、方法的调用

    选择器.属性及方法调用的配合使用: <style>            #a{                width: 200px;                height: 1 ...

  9. macvlan 网络隔离和连通 - 每天5分钟玩转 Docker 容器技术(57)

    上一节我们创建了两个 macvlan 并部署了容器,网络结构如下: 本节验证 macvlan 之间的连通性. bbox1 能 ping 通 bbox3,bbox2 能 ping 通 bbox4.即:同 ...

  10. Windows Firewall Setting

    If our web site hosted on web server canot be accessed by other computer by public network, one of t ...