【问题标题】:f2py with fortran netcdff2py 与 fortran netcdf
【发布时间】:2013-11-11 17:42:07
【问题描述】:

我正在尝试使用 f2py 编译一些使用 netcdf 库的 fortran 代码。编译似乎可以工作,但是当我尝试在 python 中导入模块时,我收到错误消息:

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: ./cdfio_simple.so: undefined symbol: netcdf_mp_nf90_get_var_2d_fourbytereal_

编译时还有如下输出:

在::cdfio_simple:cdfio_simple.f90:cdfio_simple get_useparameters:没有 cdfio_simple 使用的模块 netcdf 信息

我尝试使用的代码是(注意这是演示问题的简化代码):

模块 cdfio_simple 使用 netcdf 私人的 公共 getvar 包含 函数 getvar (cdfile,cdvar) CHARACTER(LEN=*), INTENT(in) :: cdfile, & !文件名 &cdvar!多变的 真实(种类=4),尺寸(1442,1021)::getvar! 2D 真实 !! * 局部变量 整数 :: ncid, id_var 整数 :: 状态 字符(长度 = 300)::clvar !f2py INTENT(in):: cdfile, cdvar clvar=cdvar 状态=NF90_OPEN(cdfile,NF90_NOWRITE,ncid) 状态=NF90_INQUIRE(ncid,unlimitedDimId=id_dimunlim) 状态=NF90_INQ_VARID (ncid,clvar,id_var) 状态=NF90_GET_VAR(ncid,id_var,getvar) 状态=NF90_CLOSE(ncid) getvar(:,:)=1 结束函数 getvar 结束模块 cdfio_simple

要编译它,我使用以下命令:

f2py --fcompiler=intelem -c -I/usr/local/netcdf/include/ -L/usr/local/netcdf/lib -lnetcdff --f90flags=-fPIC -m cdfio_simple cdfio_simple.f90

有人知道我怎样才能让它正常工作吗?提前感谢您的任何建议。

提姆

【问题讨论】:

  • 你也需要-lnetcdf吗?
  • 感谢您的建议。我已经尝试过-lnetcdf-lnetcdff 以及两者。我仍然遇到同样的错误。
  • 根据unidata 消息,两者结合在一起意味着新的方式。 nc-config --fflags --flibs 说什么?
  • 对于我指向的 netcdf 版本(使用 ifort 编译),它给出:-g -I/path/to/netcdf4/ifort/include-L/path/to/netcdf4/ifort_composerxe/lib -lnetcdff -lnetcdf

标签: python fortran netcdf f2py


【解决方案1】:

来自编译器的“no module netcdf”错误消息可能是 指示以下任一问题:

  • 没有安装 netcdf.mod 模块文件 /usr/local/netcdf/include/,它应该有的地方 作为安装的一部分被安装 netcdf-fortran 软件

  • 您使用的 Fortran 编译器与以前使用的不同 创建安装在该目录中的 netcdf.mod 模块文件。 不同的 Fortran 编译器有不同的格式 二进制 .mod 文件。

【讨论】:

  • 再次感谢您的建议。我已经检查了这两个。我不小心在某一时刻错误地设置了 netcdf 包含文件的路径,并且在 USE netcdf 行编译失败。我还尝试使用不同的编译器,然后返回一条错误消息,指出 netcdf 库是使用不同的编译器构建的。我应该补充一点,我能够在本机 fortran 中编译和调用这个模块,所以使用 f2py 而不是 fortran 编译本身是一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多