首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用netcdf3将fortran代码链接到netcdf4

使用netcdf3将fortran代码链接到netcdf4
EN

Stack Overflow用户
提问于 2014-07-16 07:09:14
回答 2查看 759关注 0票数 0

几个月前,我提出了一个关于用netcdf4代码编写netcdf3文件的问题。现在,我有了另一个问题。我有一个较旧的fortran代码,它是串行运行的,用于将数据从一个网格插值到另一个网格。该代码是基于使用netcdf3文件,我想用netcdf4重新编译它。代码使用了以下netcdf函数: nf_open、nf_put_vara_real等。我不是专家,但据我所知,代码应该仍然可以接受这些调用的netcdf4文件。然而,当我尝试用netcdf4编译它时,我得到了很多错误消息。代码本身使用与代码位于同一文件夹中的netcdf.inc,编译命令如下:

代码语言:javascript
复制
gfortran parameter.f90 netcdf_utils.f90 mean_streaks.f90 -L/opt/netcdf/netcdf3/lib/ -lnetcdf  -O2

然后,我尝试将netcdf3更改为4,因为我在/opt/netcdf下有netcdf3和4个文件夹。但是,例如,我在编译时收到以下错误消息:

代码语言:javascript
复制
/tmp/ccgwLiTF.o: In function `__netcdf_utils_MOD_read3d':
netcdf_utils.f90:(.text+0x445): undefined reference to `nf_open_'
netcdf_utils.f90:(.text+0x4a0): undefined reference to `nf_get_vara_real_'
netcdf_utils.f90:(.text+0x4b4): undefined reference to `nf_close_'

有没有人知道我遗漏了什么,或者我应该如何链接库来完成编译?

提前感谢您的回答

EN

回答 2

Stack Overflow用户

发布于 2014-07-16 11:32:43

-lnetcdff添加到您的编译命令(是的,2个f)。在netcdf4中,Fortran符号最终进入该库,而不是libnetcdf.so。

代码语言:javascript
复制
gfortran parameter.f90 netcdf_utils.f90 mean_streaks.f90 -L/opt/netcdf/netcdf4/lib/ -lnetcdf -lnetcdff -O2

您可以使用如下命令验证符号是否在该库中

代码语言:javascript
复制
readelf -s libnetcdff.so | grep 'nf_*_'

在我的安装中,它的输出包括您的错误中列出的所有符号。

票数 0
EN

Stack Overflow用户

发布于 2014-07-17 02:57:15

我找到问题了。问题是,在我使用的集群上,netcdf4是用mpif90编译的,而不是gfortran。因此,我将gfortran更改为mpif90,并将netcdf3更改为netcdf4。我还添加了其他链接,对于这些链接,我使用了另一个使用netcdf4的代码的CMakeList。最终的工作产品是:

代码语言:javascript
复制
mpif90 parameter.f90 netcdf_utils.f90 mean_streaks.f90 -I/opt/netcdf/netcdf4/include -L/opt/netcdf/netcdf4/lib -lnetcdff -L/opt/pnetcdf/pnetcdf-1.2.0/lib -L/opt/netcdf/netcdf4/hdf5.1.8.8/lib -lnetcdf -lpnetcdf -lhdf5_hl -lhdf5 -lm -lz -lcurl -O2 

谢谢你的帮助,我现在有另一个问题,我将在一段时间内发布:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24769635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档