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

如何正确编译包含#:if defined条件块的Fortran dlyap子程序代码

问题根源

你使用的代码中#:if、#:else、#:endif不属于标准C预处理器(CPP)的语法,是Fypp(Fortran Python预处理器)的专属指令,直接用gfortran自带的-cpp参数无法识别这类指令,会导致两个版本的dlyap子程序同时暴露给编译器,触发重复定义的编译错误。

正确编译步骤
  • 首先安装Fypp工具,可直接通过pip安装:
    pip install fypp
    
  • 按需求选择dlyap版本,用Fypp预处理源文件:
    • 如需使用依赖SLICOT库的dlyap版本,执行命令:
      fypp -D SLICOT fortress_linalg.f90 fortress_linalg_preprocessed.f90
      
    • 如需使用内置纯Fortran实现的dlyap版本,无需定义SLICOT宏,执行命令:
      fypp fortress_linalg.f90 fortress_linalg_preprocessed.f90
      
  • 用gfortran编译预处理后的文件即可:
    gfortran -c fortress_linalg_preprocessed.f90
    

你也可以通过管道合并预处理和编译步骤,不需要生成中间文件:

# 按需选择是否加-D SLICOT参数
fypp -D SLICOT fortress_linalg.f90 | gfortran -c -x f95 -o fortress_linalg.o -

注意:如果选择SLICOT版本的dlyap,最终链接程序时需要额外添加SLICOT、BLAS、LAPACK库的链接参数,否则会出现未定义引用错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 11:45:04