2

f2py でコンパイルされたモジュールを Python で動作させるのに苦労しています。

Linux 64 ビット マシンで適切にコンパイルされる Fortran で書かれたソフトウェアがあります。さらに F2Py では、Fortran ビットも使用する Python モジュールをコンパイルします。

Python モジュールのコンパイル方法は次のとおりです。

f2py --fcompiler=gfortran -I"path-to-dir-with-mod-files" -c -m mod_landems mod_landem.f90

しかし、そのモジュールをインポートしようとすると、(Ipython で) エラーが発生します。

----> 1 import mod_landems
ImportError: ./mod_landems.so: undefined symbol: __nesdis_landem_module_MOD_nesdis_landem

正直なところ、私はこのエラーに混乱しています。検索はあまり役に立たなかったので、ここで質問する必要があります。どうすれば検索を機能させることができますか? modファイルと同じディレクトリにpythonモジュールコードを配置すると、同じエラーメッセージが表示されます。

ここに私の(プリミティブ)コードの一部があります:

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 コンピュータでは動作しないようです。

4

2 に答える 2

1

f2py呼び出しでは、Fortran コンパイラ (つまり gfortran) に渡す場合と同じように、'-l' を使用して明示的にリンクするライブラリを渡す必要がありますしたがって、

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

あなたのために働きますか?

ベスト、マックス。

于 2013-02-06T10:55:31.800 に答える
0

私は同様のプロジェクトに取り組んでおり、Fortran も初めてです。以下のリファレンスを使用すると、ライブラリをインポートしてから同様に関数を呼び出すのと同じように、fortran モジュールをインポートすることがわかりました。 http://cens.ioc.ee/projects/f2py2e/usersguide/#the-quick-and-smart-way

于 2013-06-26T04:04:32.210 に答える