2011-11-14 19 views
3

私はライブラリといくつかのヘッドファイルを持っていますが、C++のソースコードはありません。私はPythonでそれを使いたいと思います。 私はpy ++を試みましたが、gccxmlはエラーを報告しました。 私はswigを試みましたが、いくつかの "未定義のシンボル"エラーがいくつかありました。 スマートツールは自動的にそのようなことを行うことができますか?Python用のC++ライブラリをラップするには?

+1

SWIG ++、ブーストパイソン – sehe

答えて

2

あなたは(あなたは2つの機能でLibraryClassというクラスをエクスポートしたいと仮定すると、このようなコードを含む、あなたがあなたの元のライブラリにリンクする単純なラッパーDLLを作成する必要があると思いboost python

使用してみてください可能性があり、FOO &バー)

#include <librarytowrap.h> 
#include <boost/python.hpp> 
using namespace boost::python; 

BOOST_PYTHON_MODULE(Library) 
{ 
    class_<LibraryClass>("LibraryClass") 
     .def("foo", &LibraryClass::foo) 
     .def("bar", &LibraryClass::bar) 
    ; 
} 

あなたはヘッダファイルでC++の定義を読んで、あなたのために懸命に仕事をするためにthe automatic code generatorを使用することはできないかもしれないが、ブーストのpythonのページによると、これはもはや維持されているので、私は」それがどれくらいうまく動作しているかはわかりません

+0

自動コードジェネレータはgccxmlを使用しますが、gccxmlはヘッドファイルに何らかのエラーがあると報告します。 – WhatisThat

+0

gccxmlから取得したエラーに関する別の質問を投稿してみることができます。多分誰かがそれを手伝ってくれるかもしれない。 – obmarg

0

このアプローチでは多少の作業が必要で、たくさんの関数があり、関数が多くのC++組み込み型を引数/戻り値として使用する場合は実行できません。

が一致しない場合、あなたは純粋なCの引数と戻り値の型で、彼らの前に「のextern C」のキーワードで、いくつかのc-ラッパ関数を定義することができます。コンパイルし、 "ラッパー関数"をC++ライブラリにリンクします。次に、ctypesモジュール(Pythonから)を使用してラッパー関数を呼び出すことができます。ラッパー関数はライブラリ内のC++関数を呼び出します。

+0

多分、このアイデアはあなたの** C **ライブラリを – WhatisThat

1

あなただけのpython ctypesパッケージを使用することができませんか?

このtutorialを参照してください。

+1

ctypesのをラップbad.thankされていません。 –

関連する問題