그래서 저는 C++ 코드를 파이썬과 통합하기 위해 좋은 도구를 찾고, 처음에는 boost.python을 보았습니다.C++ Boost.Python : 2 문제
나는 boost 문서에서 hello를 얻었고 빌드하고 실행하려고 시도했다.
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.c)입니다 boost :: python으로.
내 빌드 부스트 명령 행 :bjam toolset=gcc variant=release
나는 구글 (그리고 유래 너무)에 유사한 문제를 찾았지만, 내 경우에서 해답을 발견하지 않았다.
문제 2 - 난 건물 모듈 아무 문제도 없어 리눅스 플랫폼에서 모듈 (리눅스)
를 사용하여, 동일한 소스는 잘 컴파일 : 이제
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
, 내가 그 방법을 사용할 수 있습니다
? 문서에 모듈 이름, 인용에 대한 아무 단어 :가 Boost.Python 래퍼를 작성하여 파이썬에 노출 될 수 있습니다 다야
#include <boost/python.hpp> BOOST_PYTHON_MODULE(hello_ext) { using namespace boost::python; def("greet", greet); }
. 다 끝났어. 이제 이것을 공유 라이브러리로 만들 수 있습니다. 결과적으로 DLL이 파이썬에서 볼 수 있습니다.
>>> import hello_ext >>> print hello_ext.greet() hello, world
그래서, 내 모듈 이름 : 다음은 샘플 파이썬 세션의 libpyhello.so하지만, 내가 어떻게 파이썬 iterpreter에서 사용할 수 있습니까? 나는, 수입 pyhello, hello_ext을 시도 libpyhello - 만에 libpyhello 인터프리터가 인쇄됩니다 : ImportError: No module named pyhello
UPDATE가 2 질문 : 해결, * .so를 모듈은 반드시 수입의
ImportError: dynamic module does not define init function (initlibpyhello)
다른 모든 변종에 실패 BOOST_PYTHON_MODULE에 사용 된 ID로 명명됩니다. 내가 변경 한 후에 : BOOST_PYTHON_MODULE(hello_ext)
에서 BOOST_PYTHON_MODULE(libpyhello)
으로 모듈을 libpyhello로 잘 가져옵니다.
당신은 스스로 대답하고 자신의 대답을 받아 들여야합니다. – moooeeeep