使用fortran文件的简单Makefile会导致分段错误

时间:2017-02-08 10:29:29

标签: makefile fortran gfortran

我正在尝试使用Makefile编译一个非常简单的程序。 程序<?php $date=$row['created']; echo date_format($date,"F d,Y - H:i:s"); ?> 只使用模块main.f90

这些是文件:

main.f90

cic.f90

模块文件: cic.f90

program main

use cic, only: pi, area
implicit none
real(kind=8) :: a

! print parameter pi defined in module:
print *, 'pi = ', pi

! test the area function from module:
a = area(2.d0)

print *, 'area for a circle of radius 2: ', a

end program main

这是我创建的简单Makefile:

module cic

implicit none
real(kind=8), parameter :: pi = 3.141592653589793d0

contains

real(kind=8) function area(r)
    real(kind=8), intent(in) :: r
    area = pi * r**2
end function area

real(kind=8) function circumference(r)
    real(kind=8), intent(in) :: r
    circumference = 2.d0 * pi * r
end function circumference

end module cic

这会创建一个#Makefile main.so: main.f90 cic.o gfortran -o main.so main.f90 cic.o cic.o: cic.f90 gfortran-c cic.f90 文件但是当我尝试运行它时会出现以下错误

main.so

我正在使用运行Ubuntu的虚拟机。 它是否与目标或我如何命名模块文件有关,如果它是Segmentation fault (core dumped) 而不是cic.mod,或者模块的目标应该是.f90而不是.mod }?

此外,当我使用终端编译以下内容时编译:

.o

一切正常

1 个答案:

答案 0 :(得分:3)

#Makefile
main.exe: main.o cic.o
    gfortran -o $@ $^
%.o: %.f90
     gfortran -c $<

$@是目标(此处main.exefile.o),$^为“所有先决条件”(此处为main.o和{{1} })和cic.o是'先决条件'(此处为$<cic.f90)。见https://www.gnu.org/software/make/manual/make.html

我在中使用main.f90作为共享对象的其他内容的扩展名为第二个Vladimir F.

如果您仍然遇到代码问题,请向我们展示实际代码,实际makefile等。

编辑:PS:如果您复制粘贴Makefile,请确保用缩进替换缩进。