1、获取lapack源代码linux

wget http://www.netlib.org/lapack/lapack-3.6.1.tgzios

2、解压后编译数组

cd /mybk/lapack-3.6.1函数

cp make.inc.example make.inc学习

make后获得liblapack.a  librefblas.a  libtmglib.a测试

3、拷贝到系统库路径如/opt/local/libspa

4、测试:.net

tetst.fcode

! gfortran -o test test.f -L/opt/local/lib -llapack -lrefblas

program main

implicit none

real :: a(3,3),b(3)

integer :: v(3),iflag

!external sgesv

a=reshape([2.0,0.0,0.0,0.0,3.0,0.0,0.0,0.0,4.0],[3,3])

b=[998.0,999.0,1000.0]

print *,'a=',a

print *,'b=',b

call sgesv(3,1,a,3,v,b,3,iflag)

print *,'solve=',b

end program main

gfortran -o test test.f -L/opt/local/lib -llapack -lrefblasip

$ ./test

a=   2.00000000       0.00000000       0.00000000       0.00000000       3.00000000       0.00000000       0.00000000       0.00000000       4.00000000

b=   998.000000       999.000000       1000.00000

solve=   499.000000       333.000000       250.000000

test2.s

! gfortran -o test2 test2.f -L/opt/local/lib -llapack -lrefblas

program Console1

external dgesv

integer n, lda, nrhs, ldb

parameter (n=2,lda=2,nrhs=1,ldb=2)

double precision A(lda,n)

double precision b(ldb,nrhs)

character byebye

integer ipiv(n), info, i, j

A(1,1)=1

A(1,2)=2

A(2,1)=3

A(2,2)=4

B(1,1)=5

B(2,1)=6

write(*,*) 'Hello World'

call dgesv(n,nrhs,A,lda,ipiv,b,ldb,info)

write(*,*) 'INFO =', info

write(*,*) ((A(i,j),i=1,lda),j=1,n)

write(*,*) ((B(i,j),i=1,ldb),j=1,nrhs)

write(*,*) "END OF PROGRAM..."

end program Console1

$ gfortran -o test2 test2.f -L/opt/local/lib -llapack -lrefblas

$ ./test2

Hello World

INFO =           0

3.0000000000000000       0.33333333333333331        4.0000000000000000       0.66666666666666674

-3.9999999999999987        4.4999999999999991

或直接安装

sudo apt install libopenblas-base libopenblas-dev liblapacke liblapacke-dev liblapack3 liblapack-dev libtmglib3 libtmglib-dev

编译: gfortran -o test2 test2.f -llapack

5、CLAPACK的安装与简单使用

CLAPACK是没有源的,只能从其主页上下载源码本身编译http://www.netlib.org/clapack/clapack.tgz,解压。在其目录下的INSTALL目录中有make.inc的范本文件,好比在linux下就是make.inc.LINUX,将这个文件拷到CLAPACK目录下并更名为make.inc。

首先编译F2CLIBS,用于将fortran转换为c语言,在CLAPACK目录下,make f2clib,在

CLAPACK/F2CLIBS下就会生成libf2c.a。

编译tmglib,在CLAPACK目录下,make tmglib,会生成CLAPACK/tmglib_LINUX.a。

编译blas,在CLAPACK目录下,make blaslib,会生成CLAPACK/blas_LINUX.a。

最后是编译CLAPACK,make,会生成CLAPACK/lapack_LINUX.a

CLAPACK下的clapack.h就是所须要的头文件,除此以外还须要的一个头文件是F2CLIBS/f2c.h。

为方便使用,将必要的include文件和lib文件集中到一个目录下(如/mybk/CLAPACK):

~/prg/Fortran95/lapack$ tree /mybk/CLAPACK

/mybk/CLAPACK

├── include

│   ├── blaswrap.h

│   ├── clapack.h

│   └── F2CLIBS

│   └── f2c.h

└── lib

├── blas_LINUX.a

├── lapack_LINUX.a

├── libcblaswr.a

├── libf2c.a

└── tmglib_LINUX.a

如今就经过使用CLAPACK中的一个函数sgesv_解线性方程组来学习一下使用的方法。

包括此函数在内的全部函数能够在CLAPACK/SRC下找到源代码,并在代码中有函数参数的说明信息。sgesv_的代码文件就是sgesv.c。

int sgesv_(integer *n, integer *nrhs, real *a, integer *lda, integer *ipiv, real *b, integer *ldb, integer *info)

sgesv_的功能是使用LU分解法解线性方程组AX=B,其中A是一个n*n的方阵。

integer *n, 方程的个数,也就是A的行数和列数

integer *nrhs, B的列数

real *a, 存储矩阵A数据的一维数组,在fortran中,数组是列主序存储,在此a中的二维数据也必须是列主序

integer *lda, 等于n

integer *ipiv, 一个输出数据数组,数组大小是n,具体什么功能不太明白,可是彷佛不影响最后结果,谁明白请告诉我

real *b,存储矩阵B数据的一维数组,在fortran中,数组是列主序存储,在此b中的二维数据也必须是列主序

integer *ldb, 等于n

integer *info,输出参数,若是返回此参数为0,表示函数正常退出,不然表示出错。

代码:

// g++ -o clapackdemo clapackdemo.cpp -I/mybk/CLAPACK/include /mybk/CLAPACK/lib/lapack_LINUX.a /mybk/CLAPACK/lib/blas_LINUX.a /mybk/CLAPACK/lib/tmglib_LINUX.a /mybk/CLAPACK/lib/libf2c.a

#include

#include

using namespace std;

#include

//由于程序是C++,而CLAPACK是C语言写的,因此在此处用extern关键字

extern"C"

{

#include

}

int main(void){

integer M=3;

integer N=1;

real a[9]={4,3,11,2,-1,0,-1,2,3};

real b[3]={2,10,8};

integer lda;

integer ldb;

integer INFO;

lda=M;

ldb=M;

integer ipiv[M];

sgesv_(&M, &N, a, &lda,ipiv, b, &ldb, &INFO);

if(INFO==0)

for(int i=0;i

cout<

else

cout<

return EXIT_SUCCESS;

}

编译运行:

$ g++ -o clapackdemo clapackdemo.cpp -I/mybk/CLAPACK/include /mybk/CLAPACK/lib/lapack_LINUX.a /mybk/CLAPACK/lib/blas_LINUX.a /mybk/CLAPACK/lib/tmglib_LINUX.a /mybk/CLAPACK/lib/libf2c.a

$ ./clapackdemo

-14

56

54

linux编译lapack,linux下Fortran编译Lapack、clapack库及使用的方法相关推荐

  1. 【Linux学习】Ubuntu下内核编译(一)

    (1)当要运行内核配置时,输入make menuconfig时出现错误 遇到这个问题,主要是以为没有ncurses库,而make menconfig 须要这个库.因此须要安装ncurses或者ncur ...

  2. linux tbb 安装_linux下安装intel的tbb库

    2.我的环境为CentOS6.6-x64 +gcc4.82, 编译会有如下报错: "Created ../build/linux_intel64_gcc_cc4.8.2_libc2.12_k ...

  3. android rtorrent 编译,在Ubuntu下rtorrent编译安装笔记

    rtorrent是一个Bittorrent软件,基于终端的BT客户端,高性能.低资源,另外有不少人给rtorrent开发了Web GUI来更好的让用户控制管理rtorrent,总而言之在Linux平台 ...

  4. c++ 编译添加dll_Windows下osg编译

    一.准备工作 1.1 资料准备 1.2 环境说明 二.编译准备 2.1 目录树 2.2 ffmpeg插件编译问题处理 三.cmake配置 四.编译 五.环境变量配置 六.OSG项目 6.1 创建并配置 ...

  5. linux查询所有目录的txt文件,Linux 在指定目录下的所有文件中查找text文本的方法...

    1.使用grep -rnw查找指定文本grep -rnw '/path/to/somewhere/' -e 'pattern' -r或-R 递归遍历目录及子目录 -n 是行号 -w 代表匹配整个单词. ...

  6. 关闭自动降频 linux,在Deepin系统下CPU不能自主降频的两种解决方法

    如果你在Deepin系统下遇到CPU不能自主降频的问题,可用以下两种方法来解决.因为测试了一下针对笔记本装Deepin系统有时候遇到不能自主降频的问题,导致温度过高,结果用解决方法一处理好了.相关参考 ...

  7. linux(ubuntu)下英伟达Nvidia 显卡监控工具nvtop使用方法

    文章目录 一.问题背景 二.nvtop命令 一.问题背景 我们常用nvidia-smi指令来查看显卡的使用情况,这种方法可以看出每张显卡内存和GPU利用率的实时情况,但看不出历史数据和变化曲线,这个时 ...

  8. python numpy安装失败_Mac下安装Python的numpy库失败的解决方法

    在安装numpy库时,出现了这样的错误: 安装命令: easy_install numpy 错误: MacdeMacBook-Pro-3:python mac$ easy_install numpy ...

  9. linux下编译libuv,linux下libuv库安装教程

    下载并编译libuv libuv需要自己手动下载源码,并手动编译. 当前目录为:/home/xlz/test/github/,在后面,会用$PATH来代替,我的系统的Debian8,64bit. $g ...

最新文章

  1. 【教程】jQuery打造动态下滑菜单
  2. 200922阶段一C++关联容器map
  3. LiveVideoStackCon2019北京参会手册
  4. css 图片剪裁居中
  5. python解放二次开发_[转载]Python二次开发程序详解
  6. 我们找了3家制造企业,问问他们是怎么破解供应链难题的
  7. 嵌入不同源的页面_嵌入式技术课程教与学(教学大纲和试卷)
  8. Spring Aop 源码笔记和源码阅读个人技巧分享
  9. cad 2020安装失败,怎么完全彻底卸载删除清理干净cad 2020各种残留注册表和文件? 【转载】
  10. C语言输入一个三位数,并将其逆序
  11. 测试电脑硬盘损坏的软件,硬盘检测工具哪个好 如何检测硬盘是否损坏【详细介绍】...
  12. JavaScript梗图详解
  13. PHP教程5-安装PHPNow
  14. 谁在叩响野蛮人的家门?
  15. 9. PHP接入微信支付订单、退款订单、转款订单的查询
  16. Balanced Multimodal Learning via On-the-fly Gradient Modulation论文笔记
  17. 《人生的智慧》-叔本华著[韦启昌-(译)]
  18. C语言 八进制数转换为四进制
  19. 关于数组名(arr)的理解
  20. dpdk介绍系列之ring

热门文章

  1. SingleSpa及qiankun入门、源码分析及案例
  2. Qt下Double转int会出问题,所以自己写个四舍五入的函数
  3. 7-7 愿天下有情人都是失散多年的兄妹(25 分
  4. RuntimeError: $ Torch: not enough memory: you tried to allocate 2GB
  5. idea: springboot *.properties文件打不开,上面出现问号
  6. Excel如何同时查找多个数据
  7. 超声波收发分体量尺(GPS / BDS芯片PPS讯号作为时间同步,同步误差约十多微秒)
  8. PRUNING-卷积神经网络剪枝
  9. 使用torchsummary打印出神经网络的形状和参数大小
  10. html内联元素属性,【前端】HTML__内联元素与块元素