0

SIPを使用してPython/Cバインディングを正常にコンパイルした後、Python /C++でも同じことを実行したいと思いました。何らかの理由でこれは機能しません。

ファイルは次のとおりです。

fib.cpp

#include "fib.h"

int fib1(int n)
{
    if (n <= 0) {
        return 0;
    } else if (n <= 2) {
        return 1;
    } else {
        return fib1(n-1) + fib1(n-2);
    }
}

fib.h

int fib1(int n);

fib.sip

%Module fib

%Include fib.h

次のコマンドを実行して、中間ファイルを作成します。 sip -c . fib.sip

これまでのところすべてが機能します。

次に、distutilsを使用して.pydファイルを作成します。

setup.py

from distutils.core import setup, Extension
import sipdistutils

setup(
  name = 'fib',
  versione = '1.0',
  ext_modules=[
    Extension("fib", ["fib.sip", "fib.cpp"]),
    ],

   cmdclass = {'build_ext': sipdistutils.build_ext}
 )

次のコマンドを実行します。 python setup.py build

これは次のエラーで失敗します。

build\temp.win32-2.7\Release\sipfibcmodule.cpp:29:29: error: 'fib1' was not declared in this scope
error: command 'gcc' failed with exit status 1

問題は何でしょうか?ちなみに、gccの代わりにc ++をコンパイラとして使用するべきではありませんか?

助けていただければ幸いです。

敬具

デビッド

4

1 に答える 1

0

私は十分に良い解決策を見つけました:名前空間。次回はドキュメントをよく読みます。また、フィボナッチクラスを使用したソリューションで問題を解決できることにも言及する必要がありますが、それで満足できるものではありませんでした。

ファイルの内容の下に見つけることができます。

fib.cpp

#include "fib.h"

namespace test
{
    int fib1(int n)
    {
        if (n <= 0) {
            return 0;
        } else if (n <= 2) {
            return 1;
        } else {
            return fib1(n-1) + fib1(n-2);
        }
    }
}

fib.h

namespace test
{
    int fib1(int n);
}

fib.sip

%Module fib

namespace test {
    %TypeHeaderCode
    #include "fib.h"
    %End

    int fib1(int n);
};

setup.py-何も変更されていません

前述とまったく同じコマンドが使用されました。

于 2012-05-26T10:35:27.613 に答える