1、source中未使用外部库链接的,直接执行:
gfortran foo.f/f90 -o foo
./foo
如没有"-o"选项,生成a.out文件,这显然不是我想要的。:D
2、gFortran分两部分:compiler and library。如果gFortran不是标准安装的,编译source后执行,可能不到lib,这时可以加入"-static"选项:
gfortran -static foo.f/f90 -o foo
gFortran会将库建在所生成程序内部。
3、FortranSource有77和90两种书写格式,gFortran默认根据后缀进行compile。如果想自定义,例如foo.f是用90格式写的,可执行:
gfortran -ffree-form foo.f -o foo
大写的后缀名,gFortran会预执行该程序。
4、多source文件时,先compile不含PROGRAM语句段的source文件,各自生成foo1.o,foo2.o等。再一起编译。例如:
gfortran -c foo1.f/f90
gfortran -c foo2.f/f90
gfortran main.f/f90 foo1.o foo2.o -o main
5、foo.f95的,加选项"-std=f95",.f2003的,目前支持尚不完整。顺便说,gFortran unstable版4.3.x将支持pointer。
下面还有一些可能常用到的options。
"-fbounds-check":检查列表序列脚标是否超出
"-ffree/ffix-line-length-n":设置最大columns。77默认:72;90默认:132。n若设为"0"或"none",则不限有效行数
"-fimplicit-none":等同于在f90每段sub中声明"IMPLICIT NONE",且source中implicit语句优先
"-fmax-error-n":意义如词义
"-fsyntax-only":不编译,只检查语法
"-fexternal-blas":使用BLAS库函数,替代gFortran默认的函数
主题:关于Fortran编译器的选择 |
作者:jason388 发表时间:2007-12-30 10:51:00 | |
楼主 在几个Fortran论坛中都看到有很多人在求助编译器的问题,在此发表一下我的看法。 1.开发商业软件者,建议购买正版的Fortan编译器,比如Intel、IBM或其他公司的产品,因为无论在运行速度还是对新标准的支持上,这些大公司的产品都走在了前面。如IBM的产品,基本上做到了对2003标准的完全支持。 2.对于非商业软件开发,建议采用开源软件,如GFortran,G95。这些软件目前已经完全支持Fortran95,且部分支持Fortran2003。由于两者都属于GCC系列,因此与其他语言混合编程也非常方便。除此之外,GFortran通过GCC对OpenMP的支持,也支持并行编程。当然由于他们都是跨平台的,因此具有很好的可移植性,也方便对已有资源的利用。 3.如果采用GFortran或G95这样的命令行编译器,建议采用SciTE或CodeBlocks作为编辑器,这两款编辑器即开源,同时也都内建了对Fortran的支持,且通过简单的设置即可直接调用GFortran或G95。 4.当然对于个人用户,Ftn95也是一个很好的选择。 | |
|
|
作者:f2003 发表时间:2007-12-30 13:06:00 | |
第1楼 有时需要在速度与兼容性(跨操作系统兼容性与库的兼容性)之间取舍。 intel等商业编译器只能针对glibc的某些版本,有的也调用gcc的库,如intel fortran就调用了libstdc++。从而有兼容问题。gfortran就没有这些问题了,因为是调用你的系统的库定制编译的。 兼容性好的速度就慢,gcc要照顾几十种cpu和OS,intel fortran只满足x86/ia64两种cpu和win/linux/macOS三种操作系统,术业有专攻,集中了精力,从而提供了更好的性能。很多时候,intel fortran编译的程序的速度都能达到gfortran两倍。 | |
|
|
作者:jason388 发表时间:2007-12-31 8:23:00 | |
第2楼 关于GFortran运行速度可以参考 /wiki/GFortranResults。 确实在选择编译器时应该在速度和可移植性方面进行取舍。 如果偶尔使用Fortran,没必要考虑太多,只要好用就可以了。 如果长时间(比如若干年)使用Fortran,那仔细考虑编译器的选择就很必要了。因为操作系统的更换,机器的升级,新的算法或资源的获得等等都有可能造成已开发程序的改写或重新编译,在这种情况下,如果原来用的编译器无法使用就很麻烦了。比如Windows Vista就不支持以前的很多编译器;VS 的MFC框架在VS Express版本中不支持;Unix下的很多资源向Windows环境的移植等等。 程序运行的速度,除了编译器的原因外,编译器命令行参数的选择是非常重要的。当然最重要的还在于数据结构和算法。 | |
|
|
作者:jason388 发表时间:2007-12-31 9:03:00 | |
第3楼 GCC是开源社普遍使用的编译器集合,GFortran是其中的一员。 对于科学研究及工程计算来说,网上有大量的免费资源值得我们学习和借鉴。所以我推荐个人用户采用GFortran。 对于Fortran编程爱好者来说,与其花很多时间去破解的商用编译器,为什么不去下载一个小巧又各项功能都不错的开源软件呢? | |
|
|
作者:f2003 发表时间:2007-12-31 12:29:00 | |
第4楼 gfortran的一个较大的劣势是优化水平落后,当然gfortran只是个前端,应该说是gcc优化水平落后. 只说对处理器优化这一项.现在的x86处理器都带有simd指令,比如sse.苹果使用intel处理器的原因就是它,intel处理器带上sse后打得传统的risc工作站没有还手之力.sse指令对数值计算也非常有用,intel/pgi/absoft都在这里精雕细琢.而gcc基本上没有这能力,还是老掉牙的x87浮点处理器,虽然也能使用sse提高点速度,但基本上只能是标量sse,完全没有发挥出simd的威力.从2005年开始,无数人在gcc的邮件列表上呼吁提供基于simd指令的intrinsics,可考虑到abi兼容性等等,至今都没有达到. 用sin函数为例,libm的sin函数就是gcc的内联汇编达到的,使用x87浮点指令fsin,而intel的libimf.so提供了sin函数的基于sse的软件模拟. 结果是intel的速度快了3倍多. 当然,gfortran也有优点, 尤其是开源,bug少.intel fortran比较buggy. | |
|
|
作者:sjohn 发表时间:2007-12-31 12:46:00 | |
第5楼 楼上两位Fortran爱好者的水平好高的说 占个位子来学习一下,呵呵 | |
|
|
作者:maxperson 发表时间:2007-12-31 14:12:00 | |
第6楼 刚刚装gfortran ,我的系统是XP的! 达人推荐一个好用的编辑器,用命令行编译有点不适应, vf6.6中的调试程序方便啊,可是用gfortran命令行就给的信息太少, 不方便调试! | |
|
|
作者:jason388 发表时间:2007-12-31 17:00:00 | |
第7楼 本人认为SciTE和CodeBlocks都不错。 CodeBlocks下载地址:/index.php/topic,7515.0.html CodeBlocks采用GFortran作为编译器时的设置方法见:/index.php?title=Installing_Fortran_Compiler SciTE下载地址:/SciTE.html | |
|
|
作者:maxperson 发表时间:2007-12-31 18:27:00 | |
第8楼 去试试看codeblocks带编译器版本 有问题多向你请教 | |
|
|
作者:齐东野人 发表时间:2008-1-1 5:42:00 | |
第9楼 楼主忽略了Sun Studio(IDE加一套C/Cpp/Fortran/Java编译器),以前的商业软件,卖3000美元,现在开源了。 | |
|
|
作者:jason388 发表时间:2008-1-1 8:29:00 | |
第10楼 |
|
作者:jason388 发表时间:2008-1-1 8:42:00 | |
第11楼 感谢9楼。时间去试一试Sun Studio。 我推荐GFortran,SciTE及CodeBlocks还有一个原因是他们都很小巧。 对于编程爱好者来说,熟悉命令行工作方式也很重要喔。 | |
|
|
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论