3

Boost.Python の「最初の試行」をコンパイルすることができましたが、それを Python にインポートして、それに含まれるメソッドを呼び出す方法がわかりません。私のソースファイルは次のとおりです。

#include <stdlib.h>
#include <string>
#include <boost/python.hpp>

using namespace boost::python;

int test(int i)
{
       fprintf(stderr, "%s:\n", __FUNCTION__);
       return i * 5;
}

BOOST_PYTHON_MODULE(ipg)
{
       using namespace boost::python;
       def("test", test);
}

私のmakefileには以下が含まれています:

# Which compiler?
CC=c++

# Which flags for object files?
OFLAGS=-c -Wall -fPIC

# Which flags for the output binary?
BFLAGS=-Wall -shared -o ipg

# Which flags for boost python?
BPFLAGS=-I/usr/include/python2.7
BLIBS=-lpython2.7 -lboost_python -lboost_system

# Make.
all: source/python.cpp
    $(CC) $(BOUT) $(BFLAGS) $(BPFLAGS) $? $(BLIBS)

そして私のテストスクリプト:

import sys

# My modules.
import ipg

ipg.test()

出力バイナリはテスト スクリプトと一緒に配置され、テスト スクリプトが実行されます。これにより、次のエラーが発生します。

トレースバック (最新の呼び出しが最後): ファイル "test.py"、4 行目、インポート ipg の ImportError: ipg という名前のモジュールはありません

出力バイナリをコンパイルするにはどのフラグを使用する必要がありますか? また、それを Python にインポートするにはどうすればよいですか? 以前に Windows で boost.Python を使用したことがありますが、それはかなり前のことです。

4

1 に答える 1

6

Linux では、モジュールが という名前ipgの場合、 という名前のファイルを作成する必要がありますipg.so。簡単なメイクファイルを次に示します。

ipg.o:
    g++ -o ipg.o -c ipg.cc -Wall -fPIC -I/usr/include/python2.7
ipg.so: ipg.o
    g++ -shared -o ipg.so ipg.o -lpython2.7 -lboost_python -lboost_system
于 2012-12-13T22:14:39.793 に答える