编译FORTRAN程序的问题

时间:2015-11-25 20:53:49

标签: compilation makefile fortran gfortran

我必须编译Fortran程序,但我还没有设法做到这一点 我不是这个主题的有经验的人,但我试图在makefile中做一些更改,不幸的是问题仍然存在。

原始的makefile是:

CC = cc
F77 = f77
CFLAGS = -g -DSOLARIS -DDEBUG   #-DINTEL -DFREEBSD  #-DDEBUG
FFLAGS = -g -c
OBJDIR= ../bin
LIB = ./sub/libsaito.a

all: shearSAITOniu shearsaito.li shearsaito shearsaito.2 \
#   shearsaito run.saito saito

shearSAITOniu: shearSAITOniu.f  ${LIB}
    f77 shearSAITOniu.f -e -o ${OBJDIR}/shearSAITOniu -g ${LIB}

shearsaito.li: shearsaito.li.f  ${LIB}
    f77 shearsaito.li.f -e -o ${OBJDIR}/shearsaito.li -g ${LIB}

shearsaito: shearsaito.f ${LIB}
    f77 shearsaito.f -e -o ${OBJDIR}/shearsaito ${LIB}

shearsaito.2: shearsaito.2.f  ${LIB}
    f77 shearsaito.2.f -e -o ../bin/shearsaito.2 -g ${LIB}

qsaito.li: qsaito.li.f ${LIB}
    f77 qsaito.li.f -e -o ${OBJDIR}/qsaito.li ${LIB}

forward: forward.f ${LIB}
    f77 forward.f -e -o ${OBJDIR}/forward ${LIB}

#shear3d: shear3d.f ${LIB}
    f77 shear3d.f -e -o shear3d ${LIB}

#run.saito: run.saito.f ${LIB}
    f77 run.saito.f -o run.saito ${LIB}

#s_saito:   s_saito.f ${LIB}
#   f77 s_saito.f -o s_saito ${LIB}

然后我在CCFLAGS中用-D_LINUX替换了-DSOLARIS 做完后会出现错误信息:

  

f77 shearSAITOniu.f -e -o ../bin/shearSAITOniu -g ./sub/libsaito.a
      / usr / bin / f77:非法选项:-e
      make:*** [shearSAITOniu]错误255

我不确定此错误消息的含义,但我也尝试用gfortran替换f77编译器并收到此错误:

  

gfortran shearSAITOniu.f -e -o ./shearSAITOniu -g ./sub/libsaito.a
      gfortran:错误:./ shearSAITOniu:没有existe el archivo o el directorio
      make:*** [shearSAITOniu]错误1

我认为这个程序最初是在32位机器上编译的,我的是64位,但我不知道这究竟是如何影响的。我希望你能帮助我解决这个问题,谢谢。

1 个答案:

答案 0 :(得分:1)

要使用shearSAITOniu编译程序gfortran,请使用命令行:

gfortran shearSAITOniu.f -ffree-form -o ./shearSAITOniu -g ./sub/libsaito.a

这将解决错误:

gfortran: error: ./shearSAITOniu: No existe el archivo o el directorio

但不一定是您尚未发现的其他错误。

这就是出错的原因:

-ef77编译器的一个选项 表示:接受扩展长度输入源行

-o filename f77gfortran编译器的选项 表示:创建输出文件"文件名"

-e symbol gfortran编译器的选项(严格来说,是链接器) 这意味着:制作符号"符号"该计划的切入点

对于f77gfortran编译器,都会显示一个文件名 在命令行上没有选项-o的解释 命名输入文件以进行编译或链接。

因此失败的命令行是什么:

gfortran shearSAITOniu.f -e -o ./shearSAITOniu -g ./sub/libsaito.a

表示gfortran是:编译并链接输入文件 shearSAITOniu.f./shearSAITOniu ./sub/libsaito.a; 在生成的程序中插入调试信息-g), 并使符号 -o 成为该计划的切入点。

-o被解释为选项-e 符号符号./shearSAITOniu 被解释为输入文件,它不存在。