簡體   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