2010-06-22 3 views
7

최근에 MacPorts를 사용하여 Boost를 설치했으며 C++에서 일부 Python 임베딩을 수행했습니다.Mac OS X의 Boost.Python : "TypeError : 속성 이름은 문자열이어야합니다"

#include <boost/python.hpp> 

using namespace boost::python; 

int main(int argc, char ** argv) 
{ 
    try 
    { 
     Py_Initialize(); 

     object main_module(handle<>(borrowed(PyImport_AddModule("__main__")))); 

     object main_namespace = main_module.attr("__dict__"); 

     handle<> ignored(PyRun_String("print \"Hello, World\"", 
             Py_file_input, 
             main_namespace.ptr(), 
             main_namespace.ptr())); 
    } 
    catch(error_already_set) 
    { 
     PyErr_Print(); 
    } 
} 

제대로 컴파일,하지만 난 그것을 실행할 때, 호출 (ATTR하는이), 예외가 발생하고 결과 오류 메시지 : 나는 파이썬의 웹 사이트에 예를 들어 제대로 엑스 코드를 구성하면 그때 확인하기로 결정 "TypeError : 특성 이름은 문자열이어야하며 'str'이 아니어야합니다.". 의심스럽게 자리 표시자인 것처럼 들립니다.

Google에서 찾았지만 운이 없습니다.

나는 Leopard에서 Boost v1.39, Python 2.5 및 GCC 4.0을 사용합니다.

+0

뭐가 잘못되었나, 코드가 작동하는 것 같습니다 (win/lin, py3, gcc/vs2005/10, 부스트 42/43) 사용중인 모든 버전에서 사용중인 OS 버전이 공식적으로 지원되는지 여부를 확인 했습니까? – pprzemek

+0

파이썬, 부스트, GCC 4는 모두 공식적으로 OS X에서 지원됩니다. 그러나 Boost.Python이 구체적인지는 알기 어렵습니다. 그들의 문서는 시대에 뒤진 것으로 보이며, OS X 10.3에서 Python 2.3 및 GCC 3.3을 사용했지만 Leopard는 작동하지 않는 것으로 보입니다. 아마도 그것이 문제입니다. 나는 그것을 들여다 볼 것이다. –

답변

1

귀하의 코드는 다음과 같은 구성으로 나를 위해 일한 :

  • GCC 버전 4.2.1에 설치
  • 부스트 1.41.0을 (. AppleInc 5646 건설)

    • 스노우 레오파드 (Snow Leopard)/usr/지방/

      : 부스트/1_41_0/
    • 증권 OSX 파이썬 2.5

    은 사용하여 컴파일

    g ++ -I/개발자/SDKs/MacOSX10.6.sdk/시스템/라이브러리/프레임 워크/Python.framework/Versions/2.6/include/python2.6/-I/usr/local/boost/1_41_0/include -L/usr/local/boost/1_41_0/lib/-boost_python -L/usr/lib/python2.6/config -lpython2.6 test.cpp

  • +0

    Boost 1.42, GCC 4.2 및 Python 2.5를 사용해 보았습니다. 여전히 작동하지 않습니다. 아직 Snow Leopard로 테스트 해 보았습니다 ... –