FORTRAN笔记

新建一篇文章记录我在学习fortran语言过程中的笔记和心得。

毕设要用fortran编写动态库供labview使用,前段时间是直接在codeblock中配置的编译器,最新的svn版本也支持建立fortran项目了。但我这儿一直有问题,刚刚c::b竟然直接打不开了,一直异常错误。在网上找了一个CVFortran6绿色版,写了个helloworld,编译通过,到连接就错误。
随后我完全装了个ivf,结果还是不行。最终返回C::B重新配置,终于可以用了。配置方法明天更新。

一、在codeblock中使用fortran


(2011-04-01 15:00更新)
首先在codeblock工具栏上选择“Settings–>Compiler and debugger”,在“Global compiler settings”中选择“GNU GCC Compiler”。点击Copy后另存为“gFortran”。

选择“Selected compiler”中的gFortran,打开选项卡“Toolchain executables”,将前三个换成mingw32-gfortran.exe就可以了。

各个表内的内容如下

mingw32-gfortran.exe
mingw32-gfortran.exe
mingw32-gfortran.exe
ar.exe
gdb.exe
windres.exe
ming32-make.exe

新建fortran项目,成功编译运行。(Code::Blocks 10.05向导中没有fortran的模板,不过最新的svn7040版本中有)

二、用fortran编写dll

(2011-04-01 15:42更新)
在codeblock中编写dll并调用。

dll.f95

test.f95

使用test.f95运行时,要连接dll.dll文件。可以在项目名上点击右键选“build options…”,在选项卡“linker settings”中添加dll文件。
使用dll.f95运行时,会提示“You must select a host application to “run” a library…”。这时在工具栏选择“Project–>Set program’s arguments”,然后在“Host application:”中选择test.exe。

最终显示

点击下载源文件:mydll.zip
包含文件:dll.cbp,dll.f95,mydll.workspace,test.cbp,test.f95

三、圆周率

(2011-04-03 00:24更新)
刚刚调试数据时需要使用π,可是程序中直接写pi编译出错,提示符号未定义。尝试了下PI,果然也不行,毕竟fortran不区分大小写。
难道要直接定义变量值?这样的话直接用三角函数还是很方便的。

这样就会输出3.1415927
但是使用双精度real(8)时,输出却是3.1415927410125732,结果不对。不知是什么问题。

四、与C代码的转换

(2011-04-03 22:17更新)
刚学fortran还有些生疏,有些复杂的还是想用C写。可惜我配的C::B没法编译extern复合语句。如果能把C代码直接转换为frotran就好了。
去google搜了好久都是fortran转到c的,gcc下面有个工具f2c可以完成。可惜始终找不到反过来的。最终搜索“fortran c2f”,成功找到一款工具。

Fortran – [ 翻译此页 ]
C to Fortran Converter: http://home.earthlink.net/~dave_gemini/c2f.zip. C2J (C to Java)
Converter: http://tech.novosoft-us.com/product_c2j.jsp …
ACKNOWLEDGMENTS – Compiler Testing and Evaluation
www.personal.psu.edu/hdk/fortran.html – 网页快照 – 类似结果

站点用学校的10米vpn打不开,还好网页预览中就有地址。用工具把c2f.zip成功下下来后,果然很好用。拿我去年写的“共轴光学镜头组光线追迹软件的命令行版本”试验了一下,能成功的识别调用的头文件并转化为F90源码。不过这里面因为调用了一些其他功能,最终还是有41个错误出现。

五、dll大小写敏感问题

(2011-04-03 22:48更新)
在前面“用fortran编写dll”中,动态库中仅仅只有一个简单的函数。但因fortran大小写不敏感,有些情况下我们需要解决这个问题。
这时我们可以在dll的代码中加入如下内容

其中

表示dll输出函数名,因大小写不敏感,需要调用TEST()。

用字符串建立别名,自然解决了这个问题。

六、暂停等待命令

(2011-04-04 10:24更新)
使用gfortran编译器,用

会出现

继续运行就会提示

这时可以

给一个返回值
或者使用

发布者

Leniy

Do not , for one repulse , give up the purpose that you resolved to effect . 本文著作版权归Leniy所有,并受法律保护。 转载、使用整体或任何部分的内容(包含但不限于各个页面的标题、评论框提示语)须经过Leniy的授权。 CopyRight © 2006-2017 Leniy.org all rights reserved.

《FORTRAN笔记》有5个想法

发表评论

电子邮件地址不会被公开。 必填项已用*标注