Bonjour tout le monde, avec boost python et python 3.2
Donc je suis en train de faire l'interface python 3.2 et c++ à l'aide de boost python, et avons rencontré beaucoup de beaucoup de questions. J'ai enfin eu à le compiler à l'aide de la 2.7 bibliothèques et ça marche, mais je n'arrive pas à le faire fonctionner avec python 3.2.
Voici le code c++
#include <iostream>
using namespace std;
void say_hello(const char* name) {
cout << "Hello " << name << "!\n";
}
int main(){return 0;}
#include <boost/python/module.hpp>
#include <boost/python/def.hpp>
using namespace boost::python;
BOOST_PYTHON_MODULE(hello)
{
def("say_hello", say_hello);
}
Si je le compiler à l'aide de la 2.7 bibliothèques, il fonctionne bien, mais lorsque j'utilise le 3.2 les bibliothèques je reçois des tonnes de undefined références de libboost_python.donc
Sinon, j'ai écrit un peu de python pour le faire fonctionner:
from distutils.core import setup
from distutils.extension import Extension
setup(name="PackageName",
ext_modules=[
Extension("hello", ["testBoost.cpp"],
libraries = ["boost_python"])
])
et cela va créer une donc à l'aide de python 3.2, ou de 2,7 construire, mais quand j'ai ouvert le python 3 interprète et de tenter d'importer le de sorte qu'il donne-moi de l'erreur undefined symbol PyClass_Type de libboost_python.donc encore une fois. Des idées? Est de stimuler python compatible avec python 3.x?
Si l'information est utile, voici ma tentative de compiler à l'aide de 3.2:
$ g++ testBoost.cpp -I/usr/include/python3.2 -I/usr/local/include/boost/python -lboost_python -lpython3.2mu
/tmp/ccdmU1Yu.o: In function `PyInit_hello':
testBoost.cpp:(.text+0xc2): undefined reference to `boost::python::detail::init_module(PyModuleDef&, void (*)())'
/usr/local/lib/libboost_python.so: undefined reference to `PyString_Size'
/usr/local/lib/libboost_python.so: undefined reference to `PyFile_FromString'
/usr/local/lib/libboost_python.so: undefined reference to `PyString_Type'
/usr/local/lib/libboost_python.so: undefined reference to `PyInt_Type'
/usr/local/lib/libboost_python.so: undefined reference to `PyString_FromString'
/usr/local/lib/libboost_python.so: undefined reference to `PyString_FromStringAndSize'
/usr/local/lib/libboost_python.so: undefined reference to `Py_InitModule4_64'
/usr/local/lib/libboost_python.so: undefined reference to `PyString_FromFormat'
/usr/local/lib/libboost_python.so: undefined reference to `PyNumber_Divide'
/usr/local/lib/libboost_python.so: undefined reference to `PyNumber_InPlaceDivide'
/usr/local/lib/libboost_python.so: undefined reference to `PyInt_AsLong'
/usr/local/lib/libboost_python.so: undefined reference to `PyString_InternFromString'
/usr/local/lib/libboost_python.so: undefined reference to `PyClass_Type'
/usr/local/lib/libboost_python.so: undefined reference to `PyString_AsString'
/usr/local/lib/libboost_python.so: undefined reference to `PyInt_FromLong'
/usr/local/lib/libboost_python.so: undefined reference to `PyFile_AsFile'
collect2: ld returned 1 exit status
Et l'erreur de l'interpréteur python 3 est
File "<stdin>", line 1, in <module>
ImportError: /usr/local/lib/libboost_python.so.1.47.0: undefined symbol: PyClass_Type
Merci pour toute aide!
Je ne suis pas sûr de ce code réutilisable, vous parlez; mon booster/python fonctionne à merveille avec seulement 5 lignes de code supplémentaire.
OriginalL'auteur Dwight | 2011-08-25
Vous devez vous connecter pour publier un commentaire.
J'ai eu exactement le même problème avec Ubuntu 12.04. J'ai installé la version 1.48 de la bibliothèque et avait de lien avec
libboost_python-py32.so
au lieu delibboost_python.so
Après cela, les erreurs de l'éditeur de liens a disparu.OriginalL'auteur daramarak
Ci-dessus le code c++ compile dans un module avec
Cette commande compile ajoute
-lboost_python3
, et-shared
, et également la convention de nommage pour les modules d'extension python. Vous devez également installer lepython3-dev
paquet, et configurer/build/installer boost avec python3, si vous ne l'avez pas déjà.En python 3, je peux procéder de la façon suivante:
Vous devez être hors de la course à ce point.
Bon alors j'ai compilé avec vos instructions, et il m'a dit j'ai besoin de recompiler avec -fpic, qui a travaillé, et j'ai fini avec de la .. Maintenant, cependant, lorsque j'essaie d'importer en python, j'ai une erreur qui dit: ImportError: /usr/local/lib/libboost_python3..1.47.0: undefined symbol: PyClass_Type
OriginalL'auteur vsekhar
Bien que cette discussion ancienne, juste pour le record:
Modifier le projet-config.confiture de changer la version de python pour votre installation
Puis construire le coup de pouce:
La commande ultérieure nécessite des privilèges de superutilisateur. Puis déplacer vers le dossier contenant le code C++ pour l'extension:
Vous pouvez ensuite importer bonjour dans votre environnement python.
OriginalL'auteur Joseph Mariadassou
Liaison dans les bibliothèques python (par ex:- L/usr/lib/x86_64-linux-gnu -lpython2.7 sur linux ou find_package(PythonLibs) dans CMake1) feront de ce linker question de s'en aller.
Voici une explication plus détaillée de la question ci-dessous. Sur la ligne de commande,
Si vous vous sentez paresseux et en supposant que votre libboost_python est un lien vers python2.7, il suffit d'exécuter cette
Vous devriez voir quelque chose comme
Donc PyString_Size est pas défini (
U
) dans libboost_python27.. C'est ce que l'éditeur de liens se plaindre. Nous avons confirmé que. Maintenant, regardons ce symbole dans libpython.Sur ma machine, j'ai vu quelque chose comme ceci:
La
T
indique que le texte de ce symbole est à l'adresse indiquée. C'est donc la preuve que nous n'étions pas de liaison dans les libpython en plus de libboost_python.1 Pourquoi n'êtes-vous pas utiliser CMake? 🙂
OriginalL'auteur sriram