これは私の最初の質問です。
numpy 1.6.1 から f2py を使用しています。私は、問題なくコンパイル (および動作) するいくつかのサブルーチンを含む fortran モジュールを持っています。ただし、そのうちの 1 つは GNU 拡張である erf(x) 関数を使用します。私の目的には十分な精度ではないため、外部の erf 実装を使用しようとしています。
Fortran 77 の Numerical Recipes の 1 つを使用しようとしています。関連するすべての関数を、モジュールと同じフォルダーにある 'erf.f' という 1 つのファイルにコピーしました。include 'erf.f'
モジュールファイルの先頭で使用します。erf 関数の実際の名前を「derf」に変更したので、gfortran erf 拡張機能と競合しません。
ただし、f2py 経由でコンパイルしようとするとfoo
、「erf.f」内のすべての関数にエラーが表示されます。
エラー: 'foo' の再定義 エラー: 'foo' の以前の定義がここにありました
再定義と以前の定義を含むと言及されているcファイルを見ると、関数が2回あるようです。理由がわからないだけですか?
これを修正する方法を知っている人はいますか?乾杯。
編集: f2py が拡張機能を作成するために numpy distutils によって使用されていることについて言及しませんでした (不要な追加情報だと思ったので)。ここで言及する理由は、拡張機能を で問題なく作成できることがわかったからですf2py -c my_module.f90 -m mod
が、実行するpython setup.py install
と上記で詳述したエラーが発生します。では、f2py は distutils を介して実行すると何が違うのでしょうか?
編集 #2: 外部 erf 関数ファイルのすべての内容をモジュールと同じファイルに入れると、すべてが機能します。私は本当にこれをしたくありません。将来的にはファイルの怪物が現れるからです。しかし、この質問に対する答えが得られるまでは、今のところうまくいきます。