2012-02-04 7 views
6

私はC++コードをPythonに統合するための良いツールを探しています。最初はboost.pythonを見ました。C++ Boost.Python:2つの問題

私はboostドキュメントからtestleを取得し、ビルドして実行しようとしました。

g++ -o build\hello.o -c -IE:\Programming\libs\boost_1_48_0 -IE:\Programming\Python\include src\hello.cpp 
g++ -shared -o pyhello.dll build\hello.o -LE:\Programming\libs\boost_1_48_0\stage\lib -LE:\Programming\Python\libs -lboost_python-mgw45-mt-1_48 -lpython27 -Wl,--out-implib,libpyhello.a 
Creating library file: libpyhello.a 
build\hello.o:hello.cpp:(.text+0x20): undefined reference to `_imp___ZN5boost6python6detail11init_moduleEPKcPFvvE' 

も同様の4つの未定義のエラー: - Windowsとmingwの

は私が構築しようと私の結果

#include <Python.h> 
#include <boost/python.hpp> 

char const* greet() 
{ 
    return "hello, world"; 
} 

BOOST_PYTHON_MODULE(hello_ext) 
{ 
    using namespace boost::python; 
    def("greet", greet); 
} 

問題1:ソースコード(SRC/HELLO.CPP)でありますboost :: pythonを使ってください。

私のビルドブーストコマンドライン:bjam toolset=gcc variant=release

私は(あまりにとstackoverflowの上)グーグルで同様のトラブルを見つけましたが、私の場合で答えを見つけることができませんでした。

問題2 - Linuxプラットフォームではモジュール(Linux)の

を使用して、私は建物モジュールに問題、うまくコンパイル同じソースきません:今すぐ

g++ -o build/hello.os -c -fPIC -I/usr/include/python2.7 src/hello.cpp 
g++ -o libpyhello.so -shared build/hello.os -lboost_python -lpython2.7 

を、どのように私はそれを使用することができますか?ドキュメントでは、モジュールの命名についての言葉、引用:

#include <boost/python.hpp> 

BOOST_PYTHON_MODULE(hello_ext) 
{ 
    using namespace boost::python; 
    def("greet", greet); 
} 

それだ:

はBoost.Pythonラッパーを書くことではPythonにさらされることができません。もう終わった。これを共有ライブラリとして構築することができます。結果として生じるDLL がPythonに表示されるようになりました。ここではサンプルのPython セッションです:libpyhello.soが、どのように私はPythonのiterpreterでそれを使用することができます。

>>> import hello_ext 
>>> print hello_ext.greet() 
hello, world 

だから、私のモジュールは、指定されましたか?しなければならない解決、* .soのモジュール:

ImportError: dynamic module does not define init function (initlibpyhello) 

輸入のすべての他の変異体で失敗しました::ImportError: No module named pyhello

UPDATE第二の質問とlibpyhello通訳が印刷されただけで - 私はlibpyhello、輸入pyhello、hello_extを試してみてくださいBOOST_PYTHON_MODULEで使用されるIDの名前にする必要があります。私が変更した後:BOOST_PYTHON_MODULE(hello_ext)からBOOST_PYTHON_MODULE(libpyhello)まで、モジュールはlibpyhelloとしてうまくインポートされます。

+0

自分で答えて自分の答えを受け入れる必要があります。 – moooeeeep

答えて

関連する問題