gFortran的使用

gFortran的使用Fortran编程中相关文件后缀.a静态库(archive).f,.for,.FOR.ftn*,.f90*,.f95*,.f03*Fortran源代码(不需编译预处理).F,.fpp,.FPP.FTN*,.F90*,.F95*,.F03*Fortran源代码(需要编译预处理).rFortran源代码(需要…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

Fortran 编程中相关文件后缀

.a 静态库 (archive)
.f, .for, .FOR
.ftn*, .f90*, .f95*, .f03*
Fortran源代码(不需编译预处理)
.F, .fpp, .FPP
.FTN*, .F90*, .F95*, .F03*
Fortran源代码(需要编译预处理)
.r Fortran源代码(需要RatFor编译预处理)
.o 对象文件
.s 汇编语言代码
.so 动态库

其中,标 * 的后缀名是gfortran的文件后缀,g77不能识别。

单个源文件生成可执行程序

传统的 Fortran 程序(也就是以 Fortran 77 为代表的)只能用大写字符书写,而且每行前六个字符为特定用途所保留。第一列为字符 C 或 * 所保留,用来表征整行都是注释。第二列到第六列是为标号预留的。代码从第七列开始,到72列结束(73列及以后将被直接忽略,可作注释)。下面是示例程序 采用的是传统的 Fortran 格式:

C   helloworld.f
C
PROGRAM HELLOWORLD
WRITE(*,10)
10 FORMAT('hello, world')
END PROGRAM HELLOWORLD

Jetbrains全家桶1年46,售后保障稳定

编译器 gortran 并不要求所有代码都大写──程序中任何关键词都可以用小写字母。下面的命令将该程序编译成可执行文件:

$ gfortran helloworld.f -o helloworld

注意到:gfortran 默认会将 .f, .for, .fpp, .ftn, .F, .FOR, .FPP 和 .FTN 结尾的文件作为固定格式处理,而将.f90, .f95, .f03, .F90, .F95 和 .F03 结尾的文件作为自由格式来处理。如果我们将上面程序文件重命名为 helloworld.f90,那么我们必须手动指定其为固定格式:

$ mv helloworld.f helloworld.f90
$ gfortran helloworld.f90 -ffixed-form -o helloworld

Fortran 90及以后的标准允许并鼓励用自由的格式书写 Fortran 代码。注释以感叹号(!)开始直到行尾。先前的程序采用自由格式重写如下,其中语句、标号都可从任一列开始:

! helloworldff.f90
!
Program Helloworld
write(*,10)
10 format('hello, world')
end Program Helloworld

后缀名为 .f90,故 gfortran 将其作为自由格式处理

$ gfortran helloworldff.f90 -o helloworldff

同样,如果将程序重命名为传统后缀名,那么要通过在命令行中加入选项 -ffree-form 进行编译,如下:

$ mv helloworldff.f90 helloworldff.for
$ gfortran -ffree-form helloworldff.for -o helloworldff

由于两种格式的具有很大的区别,程序书写是只能选择其中的一种格式进行书写。注意:遵守后缀约定是很重要的。

多个源文件生成可执行程序

命令 gfortran 可将多个 fortran 源码文件编译链接成为一个单一的可执行程序。下面列出了一个保存在文件 caller.f 中的简单程序的主体部分,它调用一个函数并显示出结果:

C   caller.f
C
PROGRAM CALLER
I = Iaverageof(10,20,83)
WRITE(*,10) 'Average=', I
10 FORMAT(A,I5)
END PROGRAM CALLER

名为 Iaverage 函数定义在另一个独立的源文件中,如下:

C   called.f
C
INTEGER Iaverageof(i,j,k)
Iaverageof = (i + j + k) / 3
RETURN
END Iaverageof

通过下面的语句这两个源码文件可被编译链接成一个名为 caller 的可执行程序:

$ gfortran caller.f called.f -o caller

同样的结果可由下面的命令序列得到──先将每一个源码文件编译成对象文件,而后将对象文件链接为可执行程序:

$ gfortran -c caller.f -o caller.o
$ gfortran -c called.f -o called.o
$ gfortran caller.o called.o -o caller

生成汇编代码

选项 -S 指示编译器 gfortran 生成汇编语言代码然後结束。要得到我们本文先前的 helloworld.f 例子的汇编代码,只需输入以下命令:

$ gfortran -S helloworld.f

生成的汇编语言文件名为 helloworld.s。汇编语言的具体形式依赖于编译器的目标平台。

编译预处理

编译以 .F, .fpp, .FPP, .FTN, .F90, .F95 和 .F03 结尾的文件时,在它真正编译之前需要预处理。预处理器原本是为协助 C 语言工作所设计的。下面的例子是一个自由格式的 Fortran 程序,它通过预处理器将一个函数包含进主程序:

! evenup.F90
!
#define ROUNDUP
#i nclude "iruefunc.h"
!
program evenup
do 300 i=11,22
j = irue(i)
write(*,10) i,j
300 continue
10 format(I5,I5)
end program evenup

函数 irue() 的源代码保存在文件 iruefunc.h 中,根据宏 ROUNDUP 所定义的值的不同将产生不同的编译结果。该函数将任何一个奇数近似为一个偶数。默认情况下,它向下取近似,但是当 ROUNDUP 被定义时,该函数将向上取近似而得到一个偶数。ireu() 的函数体如下:

integer  irue(i)
k = i / 2
k = k * 2
if (i .EQ. k) then
irue = i
else
#ifdef ROUNDUP
irue = i + 1
#else
irue = i - 1
#endif
end if
end irue

下面的命令将该程序编译成可执行文件:

$ gfortran evenup.F90 -o evenup

采用自由格式写程序以利用预处理器不是必须的。固定格式程序也可进行编译预处理,下面的程序也是有效的:

C adder.F
C
#define SEVEN 7
#define NINE 9
C
program adder
isum = SEVEN + NINE
write(*,10) isum
10 format(I5)
end program adder

下面的命令将该程序编译成可执行文件:

$ gfortran adder.F -o adder

理解gfortran是gcc的前端

像 g++ 一样,gfortran 也只是设置过 Fortran 程序所需基本环境的 gcc 的一个前端。本文一开始的例子我们可以通过下面 gcc 的命令来编译:

$ gcc helloworld.f -o helloworld -lgfortran -lgfortranbegin

库文件 libgfortranbegin.a (通过命令行选项 -lgfortranbegin 被调用) 包含运行和终止一个 Fortran 程序所必须的开始和退出代码。库文件 libgfortran.a 包含 Fortran 底层的输入输出等所需要的运行函数。当运行 gfortran 时,会自动链接这两个库。这和下面的命令是等价的:

$ gfortran helloworld.f -o helloworld

当我们运行 gfortran 时,实际上运行并不是这个编译器,而是编译器驱动器。该驱动器解析命令行中所给出的选项,然后才调用真正的编译器,汇编器和链接器。默认情况下,编译器驱 动器根据命令行中给定的文件的后缀决定它自己下一步的动作:一个名为 foo.c 将传递给 C 编译器,而名为 foo.f95 的文件将传递给 Fortran 95 的编译器,等等。

理解了这一点,我们就可以知道 gcc helloworld.f 将自动调用 fortran 的编译器。只不过我们要为链接器指定必要的库。

 

安装时用sudo apt-get install gfortran

 

摘自: http://blog.21ic.com/user1/2177/archives/2010/73004.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226888.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python如何设置窗口背景色为白色_pycharm怎么将背景颜色设置成白色?「建议收藏」

    python如何设置窗口背景色为白色_pycharm怎么将背景颜色设置成白色?「建议收藏」方法:1、在pycharm中,点击顶部的“文件”选项;2、点击“设置”按钮,进入设置页面;3、点击“编辑器”选项,再点击“颜色&字体”选项;4、点击“控制台的颜色”选项,在右侧的“scheme”菜单中,选择“default”选项,点击确定即可。pycharm背景颜色设置成白色的方法1、如果没有安装pycharm可以先进行安装,安装完成之后我们点击桌面的pycharm图标进入首页。2、进入之…

    2022年8月28日
    5
  • Navicat Premium 15 激活码在线获取【2021免费激活】

    (Navicat Premium 15 激活码在线获取)这是一篇idea技术相关文章,由全栈君为大家提供,主要知识点是关于2021JetBrains全家桶永久激活码的内容https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~S32PGH0SQB-eyJsaWNlb…

    2022年3月22日
    141
  • Tomcat如何打破双亲委派机制实现隔离Web应用的?

    Tomcat通过自定义类加载器WebAppClassLoader打破双亲委托,即重写了JVM的类加载器ClassLoader的findClass方法和loadClass方法,这样做的目的是优先加载Web应用目录下的类。除此之外,你觉得Tomcat的类加载器还需要完成哪些需求呢?或者说在设计上还需要考虑哪些方面?我们知道,Tomcat作为Servlet容器,它负责加载我们的Servlet类,此外它还负责加载Servlet所依赖的JAR包。并且Tomcat本身也是一个Java程序,因此它需要加载自己的类和依赖

    2022年4月7日
    39
  • 吉利gkui19安装第三方软件_第三方app

    吉利gkui19安装第三方软件_第三方app任意安装你想要的APP????文中使用的方法为DNS劫持车机应用商店,需要你具备一定的操作能力,否则将无法达到最终目的。????阅读本文,视为你有一定电脑基础,请不要重复询问无关痛痒的问题(百度就是最好的老师)!支持车型:博瑞GE全系列,18款20款博越、星越全系列、缤越全系列、缤瑞全系列、嘉际全系列等车型文中使用的dns地址为:47.95.115.6????教程所需物料:根据教程来操作,只……

    2022年10月13日
    6
  • mfc wpf winform(工业用mfc还是qt)

    编程语言的组成编程语言做为一种语言自然和英语这些自然语言有类似的地方.学英语时我们知道要先记26个字母,然后单词及其发音,接下来就是词组,句子.反正简单的说就是记单词,熟悉词法,句法.接下来就是应用了,听说读写.而使用相同语言的人大脑里都有个翻译器,可以把自己的想法翻译成语言然后用说或写表达出来,而听和读则把接收来的语言翻译成自己大脑能理解的思想.那编程语言首先也是像英语一样会制定一些单词…

    2022年4月12日
    102
  • 自定义过滤器及标签

    自定义过滤器及标签

    2021年7月3日
    83

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号