【问题标题】:Compiling .f file, "undefined reference to 'MAIN_' issue [duplicate]编译 .f 文件,“未定义对 'MAIN_' 的引用问题 [重复]
【发布时间】:2015-06-21 03:58:36
【问题描述】:

我正在尝试使用g77 编译一个.f 文件。 我尝试使用具有以下内容(在 .cmd 文件中)的 .cmd 批处理文件(按照 g77 documentation 中描述的一种方式)对其进行编译:

g77 -o gtemp.exe gtemp.f
pause

但是当我运行上面的 .cmd 文件时,我收到以下错误消息: "未定义对'MAIN_'的引用

为什么会这样? gtemp.f 文件与 g77.exe 文件位于同一文件夹中。谢谢。

这是 gtemp.f 文件的代码:

      SUBROUTINE GTEMP(DIF,TMIN,TMAX,TAV,TG)                                    GTEMP    2
      DIMENSION AMON(12),TG(12)                                                 GTEMP    3
      DATA AMON / 15.,46.,74.,95.,135.,166.,196.,227.,258.,288.,                GTEMP    4
     1            319.,349. /                                                   GTEMP    5
      DATA P,PI,PO / 8760.,3.14159265,0.6 /                                     GTEMP    6
C                                                                               GTEMP    7
      BETA   = SQRT(PI/(DIF*P))*10.                                             GTEMP    8
      X      = EXP(-BETA)                                                       GTEMP    9
      X2     = X*X                                                              GTEMP   10
      C      = COS(BETA)                                                        GTEMP   11
      S      = SIN(BETA)                                                        GTEMP   12
      Y      = X2 - 2.*X*C + 1.                                                 GTEMP   13
      Y      = Y / (2.*BETA*BETA)                                               GTEMP   14
      GM     = SQRT(Y)                                                          GTEMP   15
      Z      = (1.-X*(C+S)) / (1.-X*(C-S))                                      GTEMP   16
      PHI    = ATAN(Z)                                                          GTEMP   17
      BO     = (TMAX-TMIN)*0.5                                                  GTEMP   18
      DO 40 I=1,12                                                              GTEMP   19
      THETA  = AMON(I)*24.                                                      GTEMP   20
   40 TG(I)  = TAV - BO*COS(2.*(PI/P)*THETA-PO-PHI)*GM + 460.                   GTEMP   21
      RETURN                                                                    GTEMP   22
      END                                                                       GTEMP   23

【问题讨论】:

  • 您的代码是子程序,而不是程序。它不能单独运行,您需要一个调用子程序的主程序。如果您想单独编译它并稍后将其与程序链接,请使用编译器的-c参数。
  • 谢谢弗拉基米尔。我将 .cmd 文件中的上部“-o”更改为“-c”。现在我收到一条消息:“gtemp.exe 没有这样的文件或目录”。有什么办法可以将这个子程序作为单独的脚本运行?
  • 不,它是一个子程序。你必须有一个调用它的主程序。您不能从中生成 exe,也不能单独运行它。
  • 我无法获取该 .exe 文件。不过,感谢您的宝贵时间和有用的回复。
  • 谁调用 gtemp 并为其赋予值 dif tmin tmax tavtg

标签: fortran gfortran


【解决方案1】:

当编译器找不到主程序时会出现此问题。

如下创建一个主程序

Program Test
Implicit None 

Real :: DIF, TMIN, TMAX, TAV, TG(12) 

Call GTEMP(DIF,TMIN,TMAX,TAV,TG)

Contains

  SUBROUTINE GTEMP(DIF,TMIN,TMAX,TAV,TG)
  ..... 
  END SUBROUTINE GTEMP

End Program Test

【讨论】:

  • 谢谢宙斯。我需要将您的代码另存为 Test.f 吗?
  • 您可以使用任何您想要的名称保存它
  • 谢谢宙斯。我仍然明白我需要做什么。我是否需要编译(首先从 Test.f 文件制作 Test.exe)?然后运行上面的.cmd文件?
  • 是的,你必须编译和链接。
  • g77 -c Test.f -o Test.exe
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-16
  • 1970-01-01
  • 2021-09-22
  • 1970-01-01
  • 1970-01-01
  • 2011-12-10
  • 2012-12-09
相关资源
最近更新 更多