繁体   English   中英

带包含文件的f2py

[英]f2py with include files

我正在编译一个名为prog.f的fortran程序。 它包含一个名为test.inc的包含文件。 这在下面成功运行,并显示找到了我的包含文件。 我生成了一个prog.so文件。

f2py -c prog.f -m prog

但是,当我从python调用此模块时,出现以下错误消息:

Python 2.7.3 (default, Aug  1 2012, 05:14:39) 
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import prog
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: ./prog.so: undefined symbol: unknown_function_

我怀疑与编译参数有关,但是我对Fortran不太熟悉。 我还需要包括我的包含文件吗? 如果可以,怎么办?

是的,您需要包含文件。 它可能很简单:

f2py -c include_file.f prog.f -m prog

尽管我还没有测试过。 另外,您可能需要使用fortran include语句将include_file包含到prog 。此外,如果您对C更加熟悉,实际上,我所知道的所有fortran编译器都使用prog.F是应该在由cpp预处理。 因此,您可能也可以通过这种方式包含文件。

我也遇到了这个问题,并且能够找到其他讨论,这些讨论只是简单地指出当前的f2py不支持文件的预处理,例如#include语句和条件编译。 https://groups.google.com/forum/#!topic/f2py-dev/aW65sEoSdG8

http://mail.scipy.org/pipermail/numpy-discussion/2009-November/046381.html

两种解决方案:最简单:如果使用gfortran编译代码,则将任何.f90或.f文件重命名为.F90或.F。 使用大写字母键gfortran自动使用预处理器(即使您未指定)。

第二:使用Fortran编译器对文件进行预处理,并将结果另存为要发送给f2py的中间Fortran代码。

gfortran -E -D<Defines-for-compiler> file.f -cpp  -o outdir/file.f

其中-E是告诉gfortran仅预处理文件的命令(可能因编译器而异),-D选项用于定义在预处理期间使用的任何值。

为了避免覆盖原始的.f文件,必须将文件保存到另一个目录(或完全更改名称)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM