bash:无法执行二进制文件exec格式错误fortran

时间:2018-06-22 13:33:59

标签: bash fortran gfortran

当我运行下面给出的代码时,它总是给我以下错误:

bash: cannot execute binary file exec format error fortran

此外,未在代码中提到的位置创建文件“文件”。我有一个64位处理器和64位版本的Ubuntu 16.04,因此这似乎不是问题。有人可以指出我错了吗?

program sandpile_model
 implicit none

integer, parameter :: len = 20
integer, dimension(len,len) :: square
!real, dimension(len,len) :: blah
!open(unit=1,file="\\home\\sandpile\\fortran\\file")

!dummy variables
integer :: i,j,d

do i=1,len
   do j=1,len
      square(i,j)=2
   end do
end do


do d=1,10000
   square((len/2)-1,(len/2)-1)=square((len/2)-1,(len/2)-1)+1
   if(square((len/2)-1,(len/2)-1)>3) then
      call toppling((len/2)-1,(len/2)-1)
   end if
end do

!open(unit=1,file="\\home\\sandpile\\fortran\\file")
 do i=1,len
   do j=1,len
      write(1,*), i,'\t',j,'\t',square(i,j)
   end do
   print*, '\n' 
end do

end program sandpile_model





!This subroutine specifies the evolution rules of the model
recursive subroutine toppling(x,y) 
 !implicit none

integer, parameter :: len = 20
integer, dimension(len,len) :: square
!real, dimension(len,len) :: blah
integer, intent(in) :: x,y


square(x,y)=square(x,y)-4
square(x+1,y)=square(x+1,y)+1
if(square(x+1,y)>3) then
   call toppling(x+1,y)
end if
square(x-1,y)=square(x-1,y)+1
if(square(x-1,y)>3) then
   call toppling(x-1,y)
end if
square(x,y+1)=square(x,y+1)+1
if(square(x,y+1)>3) then
   call toppling(x,y+1)
end if
square(x,y-1)=square(x,y-1)+1
if(square(x,y-1)>3) then
   call toppling(x,y-1)
end if

end subroutine toppling

1 个答案:

答案 0 :(得分:3)

这里出现的问题是试图运行目标文件而不是可执行文件。

非常小/有限的说明:

  • 要创建目标文件:gfortran -c <fortran file>
  • 要创建可执行文件:gfortran <fortran file>

使用多个源文件时:

  • 从各个文件创建对象,然后通过gfortran <object files>
  • 将它们链接在一起
  • 直接从源文件gfortran <fortran files>创建可执行文件

注意:

  • 文件顺序可能很重要
  • 可能还需要将库链接到可执行文件(`-l选项)
  • 可以通过-o选项
  • 指定输出文件的名称。

进一步的初始阅读:

  • 编译器文档
  • man gfortran
  • man make用于在更复杂的情况下实现自动化。