小编Bob*_*Bob的帖子

创建FORTRAN makefile

我有一个FORTRAN源代码,由许多不同的.F和.h文件组成.我需要从中构建一个可执行文件,但是我遇到了一些问题.我到目前为止生成的makefile(由于我是新手,可能有错误)是:

 # compiler
 FC = /usr/bin/gfortran-4.5

 # compile flags
 FCFLAGS = -g -c -fdefault-real-8 -fbacktrace -fno-align-commons
 # link flags
 FLFLAGS = -g -fbacktrace

 # source files and objects
 SRCS = $(patsubst %.F, %.o, $(wildcard *.F)) \
        $(patsubst %.h, %.mod, $(wildcard *.h))

 # program name
 PROGRAM = blah

 all: $(PROGRAM)

 $(PROGRAM): $(SRCS)
    $(FC) $(FCFLAGS) $@ $<

 %.o: %.F
    $(FC) $(FLFLAGS) -o $@ $<

 %.mod: %.h
    $(FC) $(FLFLAGS) -o $@ $<

 clean:
    rm -f *.o *.mod
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试制作程序时,我遇到了大量未定义的引用错误.我的意思是,在第一个编译的.F文件中的每个函数和子例程调用都会返回一个未定义的引用错误.我认为这是因为gfortran试图链接文件而不是仅编译它们然后在最后进行链接,但我认为'-c'选项应该可以防止这种情况.

更新:

正如评论者指出的那样,我混淆了编译和链接标志.此外,您不应该编译*.h文件.这是最新的,更正的makefile:

# compiler
FC …
Run Code Online (Sandbox Code Playgroud)

fortran makefile

16
推荐指数
1
解决办法
3万
查看次数

对于不属于标准的FORTRAN内在怎么办?

我试图通过使用gfortran从源代码构建它来获得遗留的FORTRAN代码.我终于能够成功构建它,但现在我运行时遇到了越界错误.我使用gdb并将错误跟踪到使用loc()内在函数的函数.当我尝试打印值时loc(ae),使用ae作为我的整数值,我得到错误"No symbol"loc"in current context".我尝试使用ifort 11.x进行编译并使用DDT进行调试并得到相同的错误.对我来说,这意味着编译器对内在函数一无所知.

一点点阅读显示,内在内在不是F77标准的一部分,所以也许这是问题的一部分.我在下面发布了内在的定义,但我不知道如何在我的代码中实现它,因此可以使用loc().

有什么建议或我误解了我的问题?因为gfortran和ifort由于越界错误而在同一个地方崩溃,但是使用loc()的函数在两个编译器之间返回相同的大数.如果两个编译器都为loc返回相同的值,则loc()将无法工作似乎有点奇怪.

用法:

iaddr = loc(obj)

哪里:

obj是一个变量,数组,函数或子程序,其地址是通缉的.iaddr是一个地址为"obj"的整数.地址格式与LARn指令存储的格式相同.

描述:

LOC用于获取某些东西的地址.返回的值在Fortran中并不真正有用,但可能需要GMAP子例程或非常特殊的调试.

legacy fortran gfortran intrinsics

4
推荐指数
1
解决办法
516
查看次数

如何使用*.h文件编译此旧版FORTRAN 77代码?

我有一个.F和.H文件的集合,构成FORTRAN代码.我遇到麻烦来编译.H文件..H文件包含一堆公共块.其中一个.H文件的示例是:

*AC HEAD      
c                                                                       HEAD 1
      common/blah/ x(25), y, z(25), p(25,mnv),                          HEAD 2
     1                t(25,mx), d(25,mnv)                               HEAD 3
c                                                                       HEAD 4
ETC...
Run Code Online (Sandbox Code Playgroud)

当我在谷歌搜索答案时,据说.h文件是c/c ++文件,但它们看起来不像是用c/c ++编写的.gfortran似乎也认为它们是C文件.

当我尝试编译时:

gfortran-4.5 -fdefault-real-8 -fbacktrace -fno-align-commons HEAD.h

我得到错误:

cc1: warning: command line option "-fdefault-real-8" is valid for Fortran but not for C
cc1: warning: command line option "-fbacktrace" is valid for Fortran but not for C
cc1: warning: command line option "-fno-align-commons" is valid for Fortran but not for C
HEAD.h:1:5: error: expected ‘=’, ‘,’, ‘;’, …
Run Code Online (Sandbox Code Playgroud)

fortran header-files fortran-common-block

3
推荐指数
1
解决办法
2856
查看次数