当前位置: 首页 > news >正文

检查 NetCDF Fortran的版本

执行

nf-config --all

命令后,它会输出一堆信息,大致像这样:

This netCDF-Fortran  version: 4.6.0
netCDF-Fortran installation dir: /usr/local/netcdf4
Fortran compiler: gfortran
Fortran compiler flags: -g -O2
Fortran preprocessor flags: -I/usr/local/netcdf4/include
Fortran linker flags: -L/usr/local/netcdf4/lib
Fortran libraries: -lnetcdff -lnetcdf
This netCDF-Fortran  4.4.0 has been built with the following features:
This netCDF-Fortran 4.4.0 has been built with the following features: --cc        -> gcc--cflags    ->  -I/usr/local/netcdf4/include -I/usr/local/netcdf4/include--fc        -> gfortran--fflags    -> -I/usr/local/netcdf4/include--flibs     -> -L/usr/local/netcdf4/lib -lnetcdff -L/usr/local/netcdf4/lib -lnetcdf -lnetcdf --has-f90   -> no--has-f03   -> yes--has-nc2   -> yes--has-nc4   -> yes--prefix    -> /usr/local/netcdf4--includedir-> /usr/local/netcdf4/include--version   -> netCDF-Fortran 4.4.0

这里面你关心的几行是:

行名说明
Fortran preprocessor flags包含头文件用的路径,比如 -I/usr/local/netcdf4/include
Fortran linker flags链接库文件的路径,比如 -L/usr/local/netcdf4/lib
Fortran libraries需要链接的库名,比如 -lnetcdff -lnetcdf

简单总结:

  • 头文件路径Fortran preprocessor flags
  • 库文件路径Fortran linker flags
  • 需要链接的库Fortran libraries

所以如果你想手动写Makefile或者编译命令,大概就这么用:

gfortran your_code.f90 -I/usr/local/netcdf4/include -L/usr/local/netcdf4/lib -lnetcdff -lnetcdf

好的,你的 nf-config --all 输出是这样的👇,我给你逐行详细解释:


项目含义你的值
This netCDF-Fortran 4.4.0 has been built with the following features:netCDF-Fortran 版本信息。你用的是 4.4.0
--cc用来编译 C 语言部分的编译器。gcc
--cflagsC 编译器的编译选项(主要是头文件路径)。-I/usr/local/netcdf4/include -I/usr/local/netcdf4/include(写了两次,应该是安装时的小问题,但一般没大碍)
--fc用来编译 Fortran 代码的编译器。gfortran
--fflagsFortran 编译选项(主要是头文件路径)。-I/usr/local/netcdf4/include
--flibsFortran链接时要加的库和路径。-L/usr/local/netcdf4/lib -lnetcdff -L/usr/local/netcdf4/lib -lnetcdf -lnetcdf(注意这里链接了两次 -lnetcdf,有点多余,但不影响)
--has-f90是否支持 Fortran 90 风格接口(模块 use netcdf)。no(不支持 F90 风格接口!)
--has-f03是否支持 Fortran 2003 风格接口(use netcdf模块等新标准)。yes(支持 F2003 风格接口!)
--has-nc2是否支持 netCDF-2 格式文件(老格式)。yes
--has-nc4是否支持 netCDF-4(HDF5后端格式)。yes
--prefix安装路径的前缀。/usr/local/netcdf4
--includedir头文件所在的目录。/usr/local/netcdf4/include
--version再次确认版本。netCDF-Fortran 4.4.0

重点提醒你⚡:

  • --has-f90 -> no

    • 表示 不支持 Fortran 90 传统模块接口(比如 use netcdf)。
    • 但你的代码里有可能用到了 Fortran 77接口,比如 ncdinq_ 这样的下划线形式。
    • 所以你需要用 -lnetcdff,而且要正确链接。
  • --flibs 告诉你,编译时要加

    -L/usr/local/netcdf4/lib -lnetcdff -lnetcdf
    

小总结:

你的编译链接命令应该长这样:

gfortran your_code.f90 -I/usr/local/netcdf4/include -L/usr/local/netcdf4/lib -lnetcdff -lnetcdf
  • -I/usr/local/netcdf4/include → 找 .mod 文件(虽然你的版本没F90模块,但保持这样没问题)
  • -L/usr/local/netcdf4/lib → 找 .so.a 静态库
  • -lnetcdff -lnetcdf → 链接 fortran接口库 + netcdf主库

为什么你遇到 undefined reference to 'ncdinq_'

原因就是:你在链接的时候,要确保加上 -lnetcdff,因为 ncdinq_netcdff 里面提供的函数。

如果忘了或者顺序不对,链接器就找不到了!


要不要我帮你写一个完整示例(包括编译和链接的命令行)?
告诉我你用的是单个 .f90 文件,还是有一堆 .o.a 文件,我可以具体写一版给你用🔧!要吗?🚀

相关文章:

  • 【Java-Day 2】Java开发利器:IntelliJ IDEA入门教程(安装、配置、项目创建、调试)
  • 零基础 学习Linux shell编程语法
  • 机器学习 | 基于回归模型的交通需求预测案例分析及代码示例
  • 【工具】scMultiMap基于单细胞多模态数据实现增强子与靶基因的细胞类型特异性映射
  • 基于STM32、HAL库的TSC2046IPWR触摸屏控制器驱动程序设计
  • 【同局域网/内网环境 Windows 远程桌面连接】
  • 动手学深度学习11.10. Adam算法-笔记练习(PyTorch)
  • Pacman-Multi-Agent Search
  • 深度解析:具身AI机器人领域最全资源指南(含人形机器人,多足机器人,灵巧手等精选资源)
  • AiCube 试用 - ADC 水位监测系统
  • 如何培养团队的责任感与归属感
  • 多节点同步协同电磁频谱监测任务分配方法简要介绍
  • 【vue3】购物车实战:从状态管理到用户体验的全流程实现
  • 测量电机的电阻、电感、磁链常数和极对数办法
  • Go语言之路————指针、结构体、方法
  • Python 基础核心知识
  • (done) 吴恩达版提示词工程 6. 转换 (翻译,通用翻译,语气风格变换,文本格式转换,拼写检查和语法检查)
  • javaWeb开发---前后端开发全景图解(基础梳理 + 技术体系)
  • 2025-4-25 情绪周期视角复盘(mini)
  • view、reshape、resize 的区别
  • 下任美联储主席热门人选沃什:美联储犯下“系统性错误”,未能控制一代人以来最严重的通胀
  • 人民日报:光荣属于每一个挺膺担当的奋斗者
  • 特朗普将举行集会庆祝重返白宫执政百日,美媒:时机不当
  • 子公司神州信息十年来首次亏损,神州控股遭国有股东广州城投派驻董事问责
  • 广州多条BRT相关线路将停运,全市BRT客运量较高峰时大幅下降
  • 中国与肯尼亚签署共同发展经济伙伴关系框架协定