私はあなたのために完全な例をまとめました:
ヘッダーファイル:
(mylib.h)
class Foo {
};
void bar(const Foo&);
実装:
#include "mylib.h"
#include <iostream>
void bar(const Foo& f) {
std::cout << &f << std::endl;
}
ライブラリをコンパイルします。
g ++ -fPIC -Wall -Wextra -shared mylib.cc -o libmylib.so
ライブラリをラップするSWIGインターフェイス:
%module mylib
// Make mylib_wrap.cxx include this header:
%{
#include "mylib.h"
%}
// Make SWIG look into this header:
%include "mylib.h"
Pythonモジュールをコンパイルします。
swig -Wall -c ++ -python mylib.i
g ++ -fPIC -Wall -Wextra -shared mylib_wrap.cxx -o_mylib.so-L。-lmylib -I / usr / include / python2.7 / -lpython2.7
Pythonモジュールをライブラリにリンクしたことに注意してください。現在のディレクトリにない場合は、ライブラリパスを指定する必要があります。SWIGは、Pythonモジュールのネイティブ部分が_module.soと呼ばれることを想定しています。
走る
LD_LIBRARY_PATH=。Python
Python 2.7.2 +(デフォルト、2011年11月30日、19:22:03)
linux2の[GCC4.6.2]
詳細については、「help」、「copyright」、「credits」、または「license」と入力してください。
>>>インポートmylib
>>> i = mylib.Foo()
>>> mylib.bar(i)
0x28cc100
>>> mylib.bar(i)
0x28cc100
>>> mylib.bar(mylib.Foo())
0x28b3b10
ここでは、LD_LIBRARY_PATHを適切に設定して、作成した共有オブジェクトがライブラリパス上にあることを確認しました。