跪求WIN7 64位的fortran软件

跪求WIN7 64位的fortran软件,第1张

目前 Win7,Win8 上可正常运行的编译器包括:

Intel Visual Fortran

Lahey Fortran

NAG Fortran

PGI Fortran

Silverfrost Ftn95

GFortran for windows / Simply Fortran

等等

我们建议,商业开发,选择 Intel Visual Fortran + Visual Studio

个人开发,计算,选择 GFortran + Code::Blocks 或 Simply Fortran

个人学习,选择 Silverfrost Ftn95

以上部分编译器下列地址找到介绍,或免费版,试用版下载。

tools.fcode.cn

pan.fcode.cn

我最近打算开始学写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.f 和 snrm2.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。

==================

后记:for Mac Users

后来我换成Mac的电脑。Mac的好处是不用安装LAPACK了,它已经内置在Mac的vecLib里面了。要使用LAPACK的过程,只需要在编译程序的时候加上 -framework vecLib就可以了。

但是Mac 没有自带ARPACK,所以还是需要安装一下的,不过也比Windows简单了。到ARPACK的官网上下载arpack96.tar.Z和patch.tar.Z到本地目录。从该目录打开terminal,输入以下命令来把安装包和补丁解压缩到一起去

zcat arpack96.tar.Z | tar -xvf -

zcat patch.tar.Z | tar -xvf -

这时候会生成一个ARPACK目录,cd进去

cd ARPACK

然后打开ARmake.inc那个文件,这里面有以下几个地方要改

home = .

DIRS = $(UTILdir) $(SRCdir)

FC = gfortran

FFLAGS = -O3 -framework vecLib

MAKE = /usr/bin/make

其他不变。然后按照前文所述,需要更改并保存 second.f (在UTIL子目录下)。然后在ARPACK目录下输入

make lib

就会看到开始编译。但是最后在ranlib的时候会出错,不知道为什么Mac不能用ranlib。但是没关系,这时候可以继续用libtool来组装库文件

libtool -o libarpack.a SRC/*.o UTIL/*.o

这样就得到了libarpack.a这个库文件。然后可以如前文所述使用。

lapack是以blas为基础的,所以安装lapack后,也会安装好blas。

之前在ubuntu下用新立得安装lapack,之后再安装phg时可以自动识别出BLAS/LAPACK库,而在centos下通过yum install 安装lapack后,phg在配置时不能识别出BLAS/LAPACK库,只能从LAPACK官网下载源码自己进行编译。

1>.将源码解压至 /usr/local/src/ 中

2>.cd /usr/local/src/lapack-3.5.0

3>.将make.inc.example 改名为 make.inc:cp make.inc.example make.inc

4>.用gedit编辑make.inc: gedit make.inc

做如下修改:

. . . . . . . . .

FORTRAN = g77

OPTS = -funroll-all-loops -O3

DRVOPTS = $(OPTS)

NOOPT=

LOADER = g77

LOADOPTS =

. . . . . . . . .

修改为:(不过话说lapack-3.5.0版本的make.inc中内容就是 FORTRAN = gfortran 所以不用修改。。。)

. . . . . . . . .

FORTRAN = gfortran

OPTS = -funroll-all-loops -O3

DRVOPTS = $(OPTS)

NOOPT=

LOADER = gfortran

LOADOPTS =

. . . . . . . . .

保存。

5>.gedit Makefile

如果之前没安装blas,做如下修改:

include make.inc

all: lapack_install lib lapack_testing blas_testing

lib: lapacklib tmglib

#lib: blaslib lapacklib tmglib

clean: cleanlib cleantesting cleanblas_testing

. . . .

修改为:

include make.inc

all: lapack_install lib lapack_testing blas_testing

#lib: lapacklib tmglib

lib: blaslib lapacklib tmglib

clean: cleanlib cleantesting cleanblas_testing

. . . .

保存。

6>.make

此时可能会提示如下错误:

/bin/sh: ./testsecond: not found

/bin/sh: ./testdsecnd: not found

/bin/sh: ./testversion: not found

make: *** [lapack_install] 错误 127

解决方法如下

make.inc中的timer没有正确指定。

要看你的编译器把etime这个函数处理成intrinsic,还是external。

实在不行选none

7>.make之后会产生 liblapack.a, librefblas.a, libtmglib.a 3个静态链接库,复制这3个文件到 /usr/lib 和 /usr/local/lib并改名为 liblapack.a, libblas.a, libtmglib.a ,注意,这里一定要改名,当初我就是直接复制过去没改名,所以phg配置时一直不能识别 BLAS/LAPACK,当改完名后再配置就可以识别了。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/tougao/8143208.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-13
下一篇 2023-04-13

发表评论

登录后才能评论

评论列表(0条)

保存