나는 boost.python을 사용하여 간단한 프로그램을 작성하려고합니다. (일부 부스트 파일 재정의)boost.python을 사용하여 모듈을 가져올 수 없습니다.
PYTHON_VERSION := 2.7
PYTHON_INC := /usr/include/python$(PYTHON_VERSION)
PYTHON_LIB_LOCATION := /usr/lib/python${PYTHON_VERSION}
PYTHON_LIB_FILE := python${PYTHON_VERSION}
BOOST_INC := ~/boost_1_54_0
BOOST_LIB_LOCATION := /home/elyashiv/boost_1_54_0/stage/lib
BOOST_LIB_FILE := boost_python
CC := gcc
CFLAGS := -c -fPIC
CInc := -I ${BOOST_INC} -I ${PYTHON_INC}
CLinkFlags = -shared -Wl,-soname,[email protected] -L${BOOST_LIB_LOCATION} -l${BOOST_LIB_FILE} -L${PYTHON_LIB_LOCATION} -l${PYTHON_LIB_FILE}
greet.o: greet.cpp
%.so: %.o
gcc ${CLinkFlags} -o [email protected] $^
%.o: %.cpp
${CC} ${CFLAGS} ${CInc} $^
불과 몇 경고 make greet.so
실행을 실행 :
//greet.cpp
#include <iostream>
#include <boost/python.hpp>
void greet()
{
std::cout << "hello world!" << std::endl;
}
BOOST_PYTHON_MODULE(greet)
{
using namespace boost::python;
def("greet", greet);
}
와 follwing을 makefile
:
나는 다음과 같은 코드가 있습니다.
Python 2.7.3 (default, Apr 10 2013, 05:46:21)
[GCC 4.6.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import greet
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: ./greet.so: undefined symbol: _ZNK5boost6python7objects21py_function_impl_base9max_arityEv
내가 잘못했던 방법과 그것을 해결하기 위해 무엇을 :
나는 다음 내가 할 파이썬에서 모듈을 가져 오려고
?편집
ldd greet.so
의 출력 :
linux-gate.so.1 => (0x001ee000)
libgcc_s.so.1 => /lib/i386-linux-gnu/libgcc_s.so.1 (0x0055d000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0x0058e000)
/lib/ld-linux.so.2 (0x003a2000)
Linux를 사용하는 경우'ldd greet.so'의 출력을 붙여 넣을 수 있습니까? 그게 당신의 boost_python 라이브러리가 링크 된 것을 보여 줍니까? –
@ AndréAnjos가 추가되었습니다. – elyashiv
'libboost_python'은 어디에 있나요? 그것은 연결되어 있지 않으므로 기호가 누락되었습니다. 컴파일이 예상대로 작동하는지 확인하십시오. –