2010-06-22 5 views
7

Recentemente ho installato Boost utilizzando MacPorts, con l'intento di eseguire l'incorporamento di Python in C++. Ho quindi deciso di verificare se ho configurato Xcode correttamente con un esempio disponibile sul sito web di Python:Boost.Python su Mac OS X: "TypeError: il nome dell'attributo deve essere stringa"

#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(); 
    } 
} 

Compila correttamente, ma quando lo lancio, la chiamata a attr() genera un'eccezione, e il messaggio di errore risultante è "TypeError: il nome dell'attributo deve essere string, non" str "". Che sembra sospettosamente un segnaposto.

Ho cercato su Google, ma senza fortuna.

Io uso Boost v1.39, Python 2.5 e GCC 4.0, su Leopard.

+0

Difficile dire cosa non va, il codice sembra funzionare (win/lin, py3, gcc/vs2005/10, boost 42/43) hai controllato se la tua versione del sistema operativo è ufficialmente supportata da tutto ciò che usi? – pprzemek

+0

Python, Boost e GCC 4 sono tutti ufficialmente supportati su OS X. Tuttavia, è difficile stabilire se Boost.Python lo sia. La loro documentazione sembra superata, e sembra che abbia funzionato su OS X 10.3 con Python 2.3 e GCC 3.3, ma nulla su Leopard. Forse è questo il problema Lo esaminerò. –

risposta

1

Il codice ha funzionato per me con la seguente configurazione:

  • Snow Leopard
  • versione gcc 4.2.1 (. AppleInc costruire 5646)
  • Boost 1.41.0 installato in/usr/local/boost/1_41_0/
  • della OSX Python 2,5

compilato utilizzando:

g ++ -I/Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/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

Ho provato con Boost 1.42, GCC 4.2 e Python 2.5; ancora non funziona Devo ancora provarlo con Snow Leopard ... –