Lapack 是一套被非常广泛使用的线性代数计算工具库,现在的主要编写语言时 Fortran90 。Lapack 基本上可以说是速度最快的线性代数计算库,我们看看官方给出的其被应用的几个地方就可以看出来:
 
high-level interface:
Matlab
Octave
NAG Numerical Librairies
Maple
R project
Scilab
 
列表上这些软件/语言是不是如雷贯耳,由此可见 Lapack 的流行程度。
 
Lapack同时有 Fortran 和 C/C++ 的接口,现在网上能找到的教程似乎都是 C 的居多,为此我整理了下我搭建 Lapack Fortran 使用环境的步骤,希望对其他人有帮助。
 
本文使用环境如下:
 
操作系统版本:Windows 
使用的编译器:gfortran (GCC版本.. MinGW环境)
Lapack版本: ..
 
1)MinGW设置:
 
由于需要使用自带的Makefile进行编译,因此要用到Makefile和自带的Make程序。对于Linux这当然不是问题,对于Windows而言则有点麻烦。
 
在 Windows 下使用make来编译程序有两种主要途径,分别是 Cygwin和 MinGW 。安装这两种软件(?)后他们就可以在 Windows 下模拟出 Linux 的使用环境。他们的主要区别我个人理解是:Cygwin 更偏向于模拟 Linux,因此编译出来的软件还是使用的 Linux 的一系列接口, Cygwin 则模拟这些接口,这也是为什么 Cygwin 编译出来的 Windows 程序还需要 cygwin1.dll 才能运行,同时效率也比较低,但是带来的好处是在两个系统上的兼容性好; MinGW 更倾向于让 Windows 用户使用 Linux 上的资源,因此编译出来的程序使用的是 Windows 的接口,速度也更快一些。
 
Cygwin 在安装的时候可选组件非常多,在 Cygwin 下如果你选择了安装 Make 组件,那么你可以在 CMD 命令行或者 Cygwin Shell 下同时用 Make 命令进行编译 ( CMD 命令行下可能还得再加个 Makefile 的文件名,具体我记不清了,但是肯定是可以做的),比较方便。
 
MinGW 相对麻烦一些,因为 MinGW 在安装时可选组件和定制项很少,不能单独安装 Make 组件。在 MinGW 下使用 Make的唯一方法,就是在安装时选择安装 MSYS Basic System。这个组件是模拟一个 Linux Shell ,这样我们就有类似 Cygwin 的能力了。
 
 
如果安装 MinGW 的时候没有安装这个组件,不要慌张,打开 MinGW 安装程序,再添加一下就行。有了这个组件后,关于MinGW的配置就大功告成了。
 
2)LAPACK源码下载及设置:
 
LAPACK 源码的下载可以去官网(http://www.netlib.org/lapack/)下,下载下来后是一个tgz文件。下载完成后解压之。
 
LAPACK 源码的 Makefile 和 make.inc 是我们需要根据系统环境修改的地方。默认源码里没有 make.inc ,但是有个 make.inc.example ,把它改名成 make.inc 。
 
打开 make.inc ,里面每个参数所需要注意的事项都注意得很清楚了,比如编译器选项什么的,根据你的需求改就是了。
 
贴一下我的 make.inc文件,由于官方默认设置就是基于gfortran所以其实我压根没改。
 
####################################################################
#  LAPACK make include file.                                       #
#  LAPACK, Version 3.4.0                                           #
#  April 2012                                                   #
####################################################################
#
SHELL = /bin/sh

#  Modify the FORTRAN and OPTS definitions to refer to the
#  compiler and desired compiler options for your machine.  NOOPT
#  refers to the compiler options desired when NO OPTIMIZATION is
#  selected.  Define LOADER and LOADOPTS to refer to the loader and
#  desired load options for your machine.
#
FORTRAN  = gfortran
OPTS     = -O2
DRVOPTS  = $(OPTS)
NOOPT    = -O0
LOADER   = gfortran
LOADOPTS =
#
# Timer for the SECOND and DSECND routines
#
# Default : SECOND and DSECND will use a call to the EXTERNAL FUNCTION ETIME
#TIMER    = EXT_ETIME
# For RS6K : SECOND and DSECND will use a call to the EXTERNAL FUNCTION ETIME_
# TIMER    = EXT_ETIME_
# For gfortran compiler: SECOND and DSECND will use a call to the INTERNAL FUNCTION ETIME
TIMER    = INT_ETIME
# If your Fortran compiler does not provide etime (like Nag Fortran Compiler, etc...)
# SECOND and DSECND will use a call to the INTERNAL FUNCTION CPU_TIME
# TIMER    = INT_CPU_TIME
# If neither of this works...you can use the NONE value... In that case, SECOND and DSECND will always return 0
# TIMER     = NONE
#
#  Configuration LAPACKE: Native C interface to LAPACK
#  To generate LAPACKE library: type 'make lapackelib'
#  Configuration file: turned off (default)
#  Complex types: C99 (default)
#  Name pattern: mixed case (default)
#  (64-bit) Data model: LP64 (default)
#
# CC is the C compiler, normally invoked with options CFLAGS.
#
CC = gcc
CFLAGS = -O3
#
#  The archiver and the flag(s) to use when building archive (library)
#  If you system has no ranlib, set RANLIB = echo.
#
ARCH     = ar
ARCHFLAGS= cr
RANLIB   = ranlib
#
#  Location of the extended-precision BLAS (XBLAS) Fortran library
#  used for building and testing extended-precision routines.  The
#  relevant routines will be compiled and XBLAS will be linked only if
#  USEXBLAS is defined.
#
# USEXBLAS    = Yes
XBLASLIB     =
# XBLASLIB    = -lxblas
#
#  The location of the libraries to which you will link.  (The
#  machine-specific, optimized BLAS library should be used whenever
#  possible.)
#
BLASLIB      = ../../librefblas.a
LAPACKLIB    = liblapack.a
TMGLIB       = libtmglib.a
LAPACKELIB   = liblapacke.a
 
这里吐槽下,我下载的 Lapack 版本是3.4.2,结果下载下来文件夹名是3.4.2,但是 make.inc 的注释版本是3.4.0,makefile的注释版本是3.4.1,你们敢认真点吗。
 
值得注意的是, Lapack 需要用到 Blas 库,因此你系统有无 Blas 库对应着两种不同的做法。
 
如果系统已经有了 Blas 库,或者说你想要用自己的 Blas 库,你需要修改 make.inc 里的 USEXBLAS 、 XBLASLIB 和 XBLASLIB 三个变量,修改完直接Make就行了。
 
如果系统没有 Blas 库,Lapack 源码里自己带了一个,可以直接用。那么保持 make.inc 里的设置如上文件所示,打开 Makefile,把 Blas 库加到编译目标里,就是 lib 参数编程:
 
lib: blaslib lapacklib tmglib
 
设置完成后打开 MinGW Shell ,一路 cd 到 Lapack 源码所在目录,输入 Make 回车,等待漫长编译过程。
 
编译完成后会自动对 Lapack 包进行测试,测试是调用一个 lapack_testing.py 文件进行测试。系统如果没有 Python 的话这一步应该会出错,需要注意下。(不过我 MinGW 默认安装后没有出错,可能已经自动安装了 Python)
 

 
3)Lapack的使用:
 
上面编译的设置是生成静态库,编译完成后我们就得到三个文件:
 
liblapack.a
librefblas.a
libtmglib.a
 
有三种方式可以使用 Lapack:
 
假设我们要编译一个程序 program.f90,对应方法如下:
 
a. 放到系统 lib 文件夹:
 
把上面三个文件直接拷贝到 MinGW 的 lib 文件夹下,然后再编译的时候直接加
 
gfortran program.f90 -llapack -lrefblas -o program.exe
 
即可链接程序。
 
b. 放到主程序根目录:
 
把上面三个静态链接库和程序放在一个目录下,然后用下面的命令编译
 
gfortran program.f90 liblapack.a librefblas.a -o program.exe
 
c. 在主程序目录单独给 lapack 库单独建个文件夹:
 
比如在 program.90 文件夹下新建 Lapack 文件夹,利用 -L 把这个文件夹添加到 lib 搜索路径里。编译命令就变成:
 
gfortran program.f90 -L./Lapack -llapack -lrefblas -o program.exe
 
我个人推荐采用第三种方式,一方面代码层次简洁美观,另外一方面减少代码阅读者对于搭建编译环境所需要的时间。
 
最后给个示例文件测试,使用第三种方法,源码:
 
,),b()
  integer ),iflag
  .,.,.,.,.,.,.,.,.],[,])
  b.,.,.]
  print ,,a,,v,b,,iflag)
  print *,'solve=',b
end program main
 
编译命令:
gfortran TestLapack.f90 -L./Lapack -llapack -lrefblas -o TestLapack.exe -Wall
 
结果:
 
 

Windows下Fortran编译Lapack库及使用的方法(转自新浪)的更多相关文章

  1. windows下Qt编译Qtxlsx库和qtxlsx库的使用方法

    最近接了个项目,合作的学长让用Qt写,而其中最重要的需求是将数据库的数据写入excel表格中和将excel的数据导入到数据库中,自己查阅了和多资料,最后决定使用qtxlsx开源库来操作excel,在编 ...

  2. Golang调用windows下的dll动态库中的函数 Golang 编译成 DLL 文件

    Golang调用windows下的dll动态库中的函数 package main import ( "fmt" "syscall" "time&quo ...

  3. 原创 C++应用程序在Windows下的编译、链接:第一部分 概述

    本文是对C++应用程序在Windows下的编译.链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分. 1概述 1.1编译工具简介 cl.exe是windows平台下的编译器,link.ex ...

  4. C++应用程序在Windows下的编译、链接(一)概述

    C++应用程序在Windows下的编译.链接(一)概述 本文是对C++应用程序在Windows下的编译.链接的深入理解和分析,文章的目录如下: 我们先看第一章概述部分. 1概述 1.1编译工具简介 c ...

  5. ACE在windows下的编译及配置(VS2010)

    ACE在windows下的编译及配置(VS2010) 分类:             -[小西南]-              2013-08-06 16:17     2354人阅读     评论( ...

  6. [转]QGis2.9在windows下的编译以及二次开发包下载

    今天心血来潮,将QGis在github上的代码更新后,又编译了一下.留意到源代码包里面的INSTALL文件有更新,于是本次编译完全基于官方的编译说明.编译过程非常顺利,除了在CMake的第一次conf ...

  7. windows下rabbitmq-c编译(带openssl、无需MinGW)

    因为项目原因,需要使用到rabbitmq的c客户端库.首先,参见上一篇windows下openssl编译,如果已经使用cmake编译过了,则先delete cache(File-Delete Cach ...

  8. Windows下PythonQt编译(vs2015+Qt5.11.2+PythonQt 3.2)探索

    时间:2018年10月20日 笔者最近在做Qt方面的开发工作,需用到脚本程序对程序内部进行扩展,就很自然的想到了PythonQt,下面介绍PythonQt在Windows下的的安装编译心得,水平有限, ...

  9. 设置 Quick-Cocos2d-x 在 Windows 下的编译环境

    http://cn.cocos2d-x.org/tutorial/show?id=1304 设置 Quick-Cocos2d-x 在 Windows 下的编译环境 Liao Yulei2014-08- ...

随机推荐

  1. 解决Qt Creator下 undefined reference to 'qmain(int,char**)'的问题

    Qt Creator运行以下程序: #include <QTextStream> #include <QList> int main(void) { QTextStream o ...

  2. 关于Qt配置编译器的问题

    PC系统:win10 安装了:Visual Studio 2017 Community ; Qt 5.8.0 运行Qt程序时,出现以下错误: 原因:来自知乎 只安装了VS2017(MSVC 15.0) ...

  3. Oracle学习操作(6)函数与存储过程

    一.oracle自定义函数 1.不带参数的函数: 返回t_book表的总条数: SQL> create function getBookCount return number as begin ...

  4. PHP 序列化变量的 4 种方法

    摘自: PHP 序列化变量的 4 种方法 http://www.iteye.com/news/25668

  5. (转)Win7 64位系统下 Retional rose 2003 安装及破解

    网上关于Retional rose 2003安装和破解的文章比较多,这里,我结合自己的亲身体验,和大家分享一下win7 旗舰版 64位系统下Retional rose 2003(下面简称rose200 ...

  6. 第10课 C++异常简介

    1. try-catch语句 (1)try语句处理正常代码逻辑 (2)catch语句处理异常情况 (3)try语句中的异常由对应的catch语句处理 (4)C++通过throw语句抛出异常信息 2. ...

  7. Spark SQL Hive Support Demo

    前提: 1.spark1.0的包编译时指定支持hive:./make-distribution.sh --hadoop 2.3.0-cdh5.0.0 --with-yarn --with-hive - ...

  8. webpack(4)--module

    Module module的配置如何处理模块. 配置Loader rules 配置模块的读取和解析规则, 通常用来配置loader, 其类型是一个数组, 数组里每一项都描述了如何去处理部分文件. 配置 ...

  9. mysql更新(八) 可视化工具Navicat的使用 索引

    17-索引   一.索引的介绍 数据库中专门用于帮助用户快速查找数据的一种数据结构.类似于字典中的目录,查找字典内容时可以根据目录查找到数据的存放位置吗,然后直接获取. 二 .索引的作用 约束和加速查 ...

  10. 使用CMQ和SCF实现邮件发送

    准备腾讯云 API 调用工具 使用 API 命令行工具来管理和运行无服务器云函数(SCF),下面就先来安装配置该工具. 安装 Python 和 PIP Python 环境是腾讯云命令行工具运行时的必要 ...