私は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としてうまくインポートされます。
自分で答えて自分の答えを受け入れる必要があります。 – moooeeeep