如何在Windows下使用LAPACK和ARPACK [转]

摘要:
我最近打算开始学写Fortran程序和使用LAPACK和ARPACK。网上也有很多Windows下怎么用LAPACK的资料,有的直接给我一个编好的LAPACK.lib,结果发现不能在gfortran上连接;有的要改Makefile什么的,我觉得都是写给高手看的。这样BLAS和LAPACK两个库的源文件都在一起了。

我最近打算开始学写Fortran程序和使用LAPACK和ARPACK。在学校的Linux上,一个make就搞定了。但是我自己的电脑是 Windows 7系统,什么cmake, nmake的我都试过了,没有一个能够make出来的。网上也有很多Windows下怎么用LAPACK的资料,有的直接给我一个编好的 LAPACK.lib,结果发现不能在gfortran上连接;有的要改Makefile什么的,我觉得都是写给高手看的。所以从前天开始我自己在家里捣 鼓了一个周末,终于弄通了,写个总结在这里做个备忘。希望有情况跟我类似的人会得到帮助。
一、Fortran 的安装
我需要一个可以在Window下使用的Fortran编译器。我不喜欢Compaq Fortran 的原因是它调试通过的程序,经常不能在学校的gfortran上面通过;而且它 的编辑器没有 code folding 非常不爽;还有就是太贵买不起。我比较推荐 Simply Fortran编辑器,小巧简单,并自带一个gfortran的编译器(Simply Fortran的安装程序:simplyfortran-1.9-setup.exe), 注册费是25美元。Simply Fortran安装起来以后,在安装目录下的 mingw\bin 这里面就有GNU的编译器 gcc 和 gfortran以及其它一堆有用的工具,这些东西下面会用到。当然如果只想要编译器的话可以直接安装 gfortran (安装程序:gfortran-windows-20110214.exe),安装好了以后编译器在gfortran\bin里面。
二、LAPACK库的编译
接下来,我要把LAPACK弄起来。于是我到netlib上下载了最新版本(lapack-3.3.0.tgz),然后解压缩出来。由于我没有BLAS库,所以我想把BLAS和LAPACK一起编译成一个库以后就可以一起用了。具体做法如下:
1. 打开解压缩文件夹,把lapack-3.3.0\BLAS\SRC里面的所有*.f文件 以及 lapack-3.3.0\INSTALL里面的dlamch.f和slamch.f两个文件 都复制到 lapack-3.3.0\SRC 文件夹里面。复制的时候提示有两个文件是重复的,我选择了不要覆盖。这样BLAS和LAPACK两个库的源文件都在一起了。
2. 然后cmd进入DOS,先检查path里面有没有 mingw\bin (或者gfortran\bin)。
E:\lapack-3.3.0>path
PATH=D:\Program Files\Simply Fortran\fwin\mingw\bin;......
如果Simply Fortran安装正确的话,应该会自动添加mingw\bin到搜索路径的。如果没有的话就手动添加一下
E:\lapack-3.3.0>path=D:\Program Files\Simply Fortran\fwin\mingw\bin; %path%
Simply Fortran的安装目录根据自己情况要修改一下。
3. DOS进入lapack-3.3.0\SRC目录,用gfortran 开始编译
E:\lapack-3.3.0>cd SRC
E:\lapack-3.3.0\SRC>gfortran -fimplicit-none -g -c *.f -O2
(等待十几分钟,可以在Windows下看到SRC文件夹里面源源不断地冒出.o文件)
然后以下文件需要无优化地重新编译
E:\lapack-3.3.0\SRC>gfortran -fimplicit-none -g -c slaruv.f -O0
E:\lapack-3.3.0\SRC>gfortran -fimplicit-none -g -c dlaruv.f -O0
E:\lapack-3.3.0\SRC>gfortran -fimplicit-none -g -c sla_wwaddw.f -O0
E:\lapack-3.3.0\SRC>gfortran -fimplicit-none -g -c dla_wwaddw.f -O0
E:\lapack-3.3.0\SRC>gfortran -fimplicit-none -g -c cla_wwaddw.f -O0
E:\lapack-3.3.0\SRC>gfortran -fimplicit-none -g -c zla_wwaddw.f -O0
我是一行一行执行的……
4. 用ar 连接成一个库
E:\lapack-3.3.0\SRC>ar rcs liblapack.a *.o
这样就在SRC文件夹里得到LAPACK库文件 liblapack.a。
三、ARPACK库的编译
先到ARPACK的官方网站去下载程序包,我选择下载了 arpack96.tar.gz 和补丁 patch.tar.gz
1. 把两个压缩文件分别解压以后,第一步是先打上补丁。复制patch下的ARPACK 粘贴到 arpack96 里面去覆盖同名文件, 在Win7上会提示合并文件夹,选择是,然后会提示复制和替换文件,选择全部替换就行了。
2. 把 arpack96\ARPACK\BLAS,arpack96\ARPACK\LAPACK 和 arpack96\ARPACK\UTIL 中的 *.f 文件都复制到 arpack96\ARPACK\SRC 里面去。然后有三个源文件需要改动。首先,找到second.f 打开,把里面的内容改成:
SUBROUTINE SECOND( T )
REAL T
CALL CPU_TIME(T)
RETURN
END
保 存。因为原来的程序要调用ETIME来返回时间,但是连接的时候会出错提示找不到ETIME。我看了一下gfortran 里好像是用 CPU_TIME 来计时的,所以就改过来。还有就是 dnrm2.f 和 snrm2.f 使用了ASSIGN statement, 这个语句在Fortran 95 的标准里面已经被删除了,所以gfortran 不能编译这两个文件。因此,需要到netlib上下载它们的更新版本: dnrm2.fsnrm2.f 并替换旧版文件。
3. 接下来编译ARPACK和LAPACK基本原理是类似的。用DOS进入 arpack96\ARPACK\SRC 目录,用gfortran 开始编译:
E:\arpack96\ARPACK\SRC>gfortran -fimplicit-none -g -c *.f -O2
4. 用ar 连接成一个库
E:\arpack96\ARPACK\SRC>ar rcs libarpack.a *.o
这样就在SRC文件夹里得到ARPACK库文件 libarpack.a。
四、LAPACK的使用
如果用gfortran直接编译的话,有两种选择。第一种方法,先把liblapack.a和libarpack.a复制到程序源文件的目录下,然后一起编译
gfortran foo.f90 liblapack.a libarpack.a
第二种方法是把liblapack.a和libarpack.a复制到 gfortran 所在目录下的 \lib 里面,然后以后编译的时候只要加上 -llapack 或 -larpack的flag就可以了
gfortran foo.f90 -llapack -larpack
这个就和Linux下是一样的了。
在Simply Fortran里面用的话,先确保 liblapack.a和libarpack.a 已经复制到 mingw\lib 里面,然后从Options菜单打开Project Options,在Project Flags的Linkers里面添加 -llapack 或 -larpack 就行了,不过每个project都要设定project flags。注意要用1.11以上版本的Simply Fortran,旧版的Project Flags放置的位置有 bug。

[转] http://www.douban.com/note/132392388/

免责声明:文章转载自《如何在Windows下使用LAPACK和ARPACK [转]》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇android学习ProgressBar的简单使用百度UEditor基本使用下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Windows 下openssl安装与配置

编译thirift失败 网上方法很多,大部分是针对32位机的,自己的电脑因为是win7,64位,摸索了很久才安装成功.   环境 WIN7, 64位, vs2005   下载ActivePerl 配置过程中需要生成一些mak文件,这些生成代码用perl脚本生成,所以要安装一个ActivePerl.   网址: http://www.activestate...

教你阅读 Cpython 的源码(一)

目录 第一部分-介绍 Cpython 源代码中有什么?如何编译 Cpython 代码编译器能做什么?为什么 Cpython 是用 C 语言而是 Python 编写的?Python 语言的规范Cpython 中的内存管理机制结论 第二部分-Python 解释器进程 建立运行时配置读取文件/输入词法解析和句法解析抽象语法树结论 第三部分- Cpython 的编...

qt configure参数配置介绍

======================================全文是按照./configure -help来翻译的==========================================Usage:configure[-h] [-prefix <dir>] [-prefix-install] [-bindir <...

Java虚拟机解释器与JIT编译器

一、JAVA编译相关概念 1、动态编译(dynamic compilation)指的是“在运行时进行编译”;与之相对的是事前编译(ahead-of-time compilation,简称AOT),也叫静态编译(static compilation)。 2、JIT编译(just-in-time compilation)狭义来说是当某段代码即将第一次被执行时进...

Linux Makefile analysis for plain usr

一、本文主旨   笔者写了一篇linux内核Makefile整体分析 ,测重于理论分析,对于实际应用不算对头,所以需要写一篇实用性较强的文章,为以后内核、驱动移植做好铺垫。 二、本文内容概要 1、编译哪些文件 2、怎样编译这些文件 3、怎样连接这些文件,它们的顺序如何 三、编译哪些文件   本文的实验源码是对“linux-2.6.30.4”进行移植后的运行...

使用Debian的kernelpackage系统创建自己的内核

使用Debian的kernel-package系统创建自己的内核 1.简介我曾经手动编译内核,这必须按顺序进行一系列的步骤;kernel-package就是写来完成这些所必须的步骤的.(现在他已超出这个范畴,但是实际上, 那正是他所完成的).这对于新手来说是相当重要的:make-kpkg完成了编译一个内核所需的所有步骤,并且内核的安装是一个快照.--...