Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python f2py与fortran netcdf_Python_Fortran_Netcdf_F2py - Fatal编程技术网

Python f2py与fortran netcdf

Python f2py与fortran netcdf,python,fortran,netcdf,f2py,Python,Fortran,Netcdf,F2py,我正在尝试使用f2py编译一些fortran代码,这些代码利用netcdf库。编译似乎可以工作,但当我尝试用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_ 回

我正在尝试使用f2py编译一些fortran代码,这些代码利用netcdf库。编译似乎可以工作,但当我尝试用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_
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
导入错误:./cdfio\u simple.so:未定义符号:netcdf\u mp\u nf90\u get\u var\u 2d\u fourbytereal_
在编译过程中还有以下输出:

In: :cdfio_simple:cdfio_simple.f90:cdfio_simple get_useparameters: no module netcdf info used by cdfio_simple In::cdfio_simple:cdfio_simple.f90:cdfio_simple get_useparameters:没有cdfio使用的模块netcdf信息\u simple 我尝试使用的代码是(请注意,这是演示问题的简化代码):

模块cdfio_simple 使用netcdf 私有的 公共getvar 包含 函数getvar(cdfile,cdvar) 字符(LEN=*),意图(in)::cdfile,&!文件名 &cdvar!变量 实(种类=4),维(14421021)::getvar!二维实数 !! * 局部变量 整数::ncid,id\u var 整数::istatus 字符(LEN=300)::clvar !f2py意图(in)::cdfile,cdvar clvar=cdvar istatus=NF90_打开(cdfile,NF90_NOWRITE,ncid) istatus=NF90\u INQUIRE(ncid,未限制的id=id\u dimunlim) istatus=NF90(ncid、clvar、id、var) istatus=NF90获取变量(ncid、id、获取变量) istatus=NF90_关闭(ncid) getvar(:,:)=1 结束函数getvar 端模块cdfio_简单 要编译它,我使用以下命令:

f2py --fcompiler=intelem -c -I/usr/local/netcdf/include/ -L/usr/local/netcdf/lib -lnetcdff --f90flags=-fPIC -m cdfio_simple cdfio_simple.f90 f2py--fcompiler=intelem-c-I/usr/local/netcdf/include/-L/usr/local/netcdf/lib-lnetcdff--f90flags=-fPIC-m cdfio_simple cdfio_simple.f90 有人知道我怎样才能让它正常工作吗?提前感谢您的建议

Tim

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

  • 中未安装netcdf.mod模块文件 /usr/local/netcdf/include/,其中应包含 已作为安装的一部分安装 netcdf fortran软件

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


您也需要
-lnetcdf
吗?谢谢您的建议。我试过使用
-lnetcdf
-lnetcdff
,两者都试过。我仍然会犯同样的错误。根据一条消息,两者结合在一起意味着新的方式。
nc-config--fflags--flibs说什么呢?对于我所指的netcdf版本(使用ifort编译),它给出了:
-g-I/path/to/netcdf4/ifort/include
-L/path/to/netcdf4/ifort\u composerxe/lib-lnetcdff-lnetcdf
,再次感谢您的建议。我已经检查过这两个了。我不小心在某一点错误地设置了netcdf include文件的路径,并且在
USE netcdf
行编译失败。我还尝试使用不同的编译器,然后返回一条错误消息,指出netcdf库是使用不同的编译器构建的。我应该补充一点,我能够用原生fortran编译和调用这个模块,因此使用f2py而不是fortran编译本身是一个问题。 f2py --fcompiler=intelem -c -I/usr/local/netcdf/include/ -L/usr/local/netcdf/lib -lnetcdff --f90flags=-fPIC -m cdfio_simple cdfio_simple.f90