[英]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.