2010-06-22 9 views
7

J'ai récemment installé Boost en utilisant MacPorts, avec l'intention de faire de l'intégration de Python en C++. Je décide alors de vérifier si je configuré Xcode correctement avec un exemple trouvé sur le site Web de Python:Boost.Python sur Mac OS X: "TypeError: le nom de l'attribut doit être une chaîne"

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

Il compile correctement, mais quand je le lance, l'appel à attr() renvoie une exception, et le message d'erreur résultant est "TypeError: le nom de l'attribut doit être une chaîne, pas 'str'". Ce qui sonne étrangement comme un espace réservé. J'ai regardé sur Google, mais pas de chance. J'utilise Boost v1.39, Python 2.5 et GCC 4.0, sur Leopard.

+0

Difficile de dire quel est le problème, le code semble fonctionner (win/lin, py3, gcc/vs2005/10, boost 42/43) avez-vous vérifié si votre version de OS est officiellement supportée par tout ce que vous utilisez? – pprzemek

+0

Python, Boost et GCC 4 sont tous officiellement supportés sur OS X. Cependant, il est difficile de savoir si Boost.Python l'est spécifiquement. Leur documentation semble obsolète, et il semble que cela a fonctionné sur OS X 10.3 avec Python 2.3 et GCC 3.3, mais rien sur Leopard. C'est peut-être le problème. Je vais regarder dedans. –

Répondre

1

Votre code a fonctionné pour moi avec la configuration suivante:

  • gcc version Snow Leopard
  • 4.2.1 (. AppleInc construire 5646)
  • Boost 1.41.0 installé dans/usr/local/boost/1_41_0/
  • Stock OSX Python 2,5

compilé en utilisant:

g ++ -I/Developer/SDKs/MacOSX10.6.sdk/System/Bibliothèque/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

J'ai essayé avec Boost 1.42, GCC 4.2 et Python 2.5; ne fonctionne toujours pas. Je n'ai pas encore testé avec Snow Leopard ... –