You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译Fortran多文件代码时报错Not defined as function or array怎么办

问题原因

该错误是编译test.f时编译器无法识别func的符号属性导致的,核心诱因有两点:

  1. 外部函数标识缺失:仅声明REAL :: FUNC无法让Fortran编译器区分该符号是数组还是外部函数,部分编译器要求显式用EXTERNAL关键字标记外部调用的函数。
  2. 隐式声明+大小写匹配问题:你提供的func.f没有显式声明函数返回值、入参的类型,完全依赖Fortran默认的I-N隐式类型规则;同时部分ifort版本对固定格式.f文件默认开启大小写敏感,test.f中声明的大写FUNC和func.f中定义的小写func会被判定为两个不相关的符号,无法匹配到定义。
解决方法

按以下步骤调整代码即可:

  • 调整func.f,显式声明函数返回值和入参类型,规避隐式类型规则的不确定性:
REAL FUNCTION func(X)
      REAL :: X
      func = X
      RETURN
      END
  • 调整test.f,添加EXTERNAL关键字标记func为外部函数,同时统一函数名大小写,额外可以修正你原本写反的输出变量(原代码输出X而非计算得到的Y):
PROGRAM test
      REAL :: X,Y
      REAL :: func
      EXTERNAL func
      X = 1.0
      Y = func(X)
      WRITE(6,*) Y
      END
  • 重新执行原有编译命令即可:
ifort -c func.f
ifort test.f func.o -o test

如果调整后仍报相同错误,可添加-noforcasec编译参数关闭ifort的大小写敏感选项:

ifort -c -noforcasec func.f
ifort -noforcasec test.f func.o -o test

内容的提问来源于stack exchange,提问作者Daniel Young

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 06:15:04