首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >F2PY找不到模块

F2PY找不到模块
EN

Stack Overflow用户
提问于 2013-02-04 13:49:57
回答 2查看 3K关注 0票数 2

我在Python语言中使用f2py编译模块时遇到了困难。

我有一个用Fortran写的软件,它在Linux 64位机器上编译得很好。此外,在F2Py上还编译了一个使用Fortran位的Python模块。

以下是Python模块的编译方式:

代码语言:javascript
复制
f2py --fcompiler=gfortran -I"path-to-dir-with-mod-files" -c -m mod_landems mod_landem.f90

但是一旦我想导入这个模块,我就会得到一个错误(在Ipython中):

代码语言:javascript
复制
----> 1 import mod_landems
ImportError: ./mod_landems.so: undefined symbol: __nesdis_landem_module_MOD_nesdis_landem

老实说,我对这个错误感到困惑。搜索没有多大帮助,所以我需要在这里问你:我如何才能让它工作?如果我将python模块代码放在mod文件所在的同一目录中,则会产生相同的错误消息。

下面是我的一段(原始)代码:

代码语言:javascript
复制
module n_landem
implicit none

! INPUT VARIABLES
real(8) Angle
real(8) Sm_Content
real(8) Veg_Frac
real(8) Soil_Temp
real(8) Land_Temp
real(8) Snow_Depth
real(8) Frequency

! OUTPUT VARIABLES
real(8) Emis_H
real(8) Emis_V

contains

subroutine landem

  USE NESDIS_LANDEM_MODULE
  USE TYPE_KINDS, ONLY : fp

  call NESDIS_LandEM(Angle,Frequency,Sm_Content,Veg_Frac,Soil_Temp,Land_Temp,Snow_Depth,Emis_H,Emis_V)
end subroutine landem
end module n_landem

如果我没记错的话,不久前这个模块是可导入的,但似乎不能在debian64安装或debian32bit计算机上工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-06 18:55:32

在你的f2py调用中,你必须传递显式地使用'-l‘链接的库,就像传递给你的Fortran编译器(例如gfortran)一样。因此,

代码语言:javascript
复制
f2py -c --fcompiler=gfortran -I"path-to-dir-with-mod-files" --fcompiler=gfortran -I"path-to-dir-with-mod-files" -lNESDIS_LandEM_Module -m mod_landems mod_landem.f90 -m mod_landems mod_landem.f90

为你工作?

最好的,麦克斯。

票数 1
EN

Stack Overflow用户

发布于 2013-06-26 12:04:32

我正在做一个类似的项目,我也是Fortran的新手。使用下面的引用,我发现导入fortran模块就像导入库一样,然后以类似的方式调用函数。http://cens.ioc.ee/projects/f2py2e/usersguide/#the-quick-and-smart-way

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

https://stackoverflow.com/questions/14681068

复制
相关文章

相似问题

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