10
votes

Bonjour le monde avec Boost Python et Python 3.2

Donc, j'essaie d'interfacer Python 3.2 et C ++ en utilisant Boost Python et rencontré de nombreux problèmes. Je l'ai finalement acheté pour compiler à l'aide des 2,7 bibliothèques et cela fonctionne, mais je n'arrive pas à le faire fonctionner avec Python 3.2.

Voici le code C ++ P>

File "<stdin>", line 1, in <module>
ImportError: /usr/local/lib/libboost_python.so.1.47.0: undefined symbol: PyClass_Type


2 commentaires

Vous voudrez peut-être envisager de regarder dans Swig plutôt que de Boost.python, si vous le souhaitez. Il nécessite beaucoup moins de code de la chaudron et je l'ai eu pour travailler avec Python3 assez facilement auparavant.


@San je ne suis pas sûr de ce que vous parlez de code de chaudière; Mon boost / python fonctionne bien avec seulement 5 lignes de code supplémentaires.


4 Réponses :


5
votes

Le code ci-dessus C ++ Compile dans un module avec

$ python3
Python 3.2 (r32:88445, Mar 25 2011, 19:28:28) 
[GCC 4.5.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import hello
>>> hello.say_hello('bill')
Hello bill!
>>>


2 commentaires

J'ai essayé d'utiliser -lboost_python3 mais obtenez toujours la même erreur, et j'ai déjà changé mon fichier de confiture pour pointer vers Python 3


D'accord, j'ai donc compilé avec vos instructions, et cela m'a dit que je devais recompiler -fic, qui a fonctionné et j'ai fini avec le .so. Maintenant, quand j'essaie d'importer à Python, je reçois une erreur indiquant: Importerror: /USR/Local/lib/LIBBOOST_PYTHON3.SO.1.47.0: Symbole non défini: pyclass_type



8
votes

J'ai eu le même problème, avec Ubuntu 12.04. J'ai installé la version 1.48 de la bibliothèque et j'ai dû créer un lien avec libboost_python-py32.so au lieu de libboost_python.so après avoir disparu.


0 commentaires

2
votes

Bien que cette discussion vieille, juste pour le record: Modifier le projet-config.jam Pour modifier la version Python à votre configuration

g++ -std=c++11 hellopy.cpp -I/usr/include/python3.4 -I/usr/local/include/boost/python -lboost_python3  -o hello.so -shared -fPIC


0 commentaires

2
votes

liaison dans les bibliothèques Python (par exemple, -l / usr / lib / x86_64-linux-gnu -lpython2.7 sur Linux ou Find_Package (PythonLibs) dans Cumake 1 sup>) Vacher.

Voici une explication plus détaillée de la question ci-dessous. Sur la ligne de commande, p> xxx pré>

Si vous vous sentez paresseux et que votre libboost_python lie à Python2.7, exécutez simplement ce p>

00000000000f0530 T PyString_Size


1 commentaires

Avoir une idée sur la façon d'obtenir que libboost_python se liera statiquement avec Libpython lors d'une construction de boost ??