Erreur avec rasade: non défini symbole: _ZN7hosters11hostersLink7getLinkEi
-
22-09-2019 - |
Question
Je suis en train de faire un python contraignant pour la cette bibliothèque:
http://code.google.com/p/hosterslib/ .
J'utilise rasade, est Heres le code:
%module pyhosters
%{
#include "hosters/hosters.hpp"
%}
%include "hosters/hosters.hpp"
Je lance
rasade -c ++ -python -o swig_wrap.cxx swig.i
et je compilez avec
g ++ -O2 -fPIC -shared -o _pyhosters.so swig_wrap.cxx
python-config --libs --cflags
-lhosters -lcln -lhtmlcxxpkg-config libglog --libs --cflags
-I / usr / include / python2.6 -Wall -Wextra
Mais quand je lance python et je l'importer, je reçois:
>>> import pyhosters
Traceback (most recent call last):
File "<input>", line 1, in <module>
File "./pyhosters.py", line 7, in <module>
import _pyhosters
ImportError: ./_pyhosters.so: undefined symbol: _ZN7hosters11hostersLink7getLinkEi
Comment puis-je résoudre cela?
Merci.
La solution
C'est le nom de mutilée:
hosters::hostersLink::getLink(int)
Assurez-vous que vous avez défini cette fonction.
D'accord, j'ai regardé de plus près Hébergeurs 0,6. Les fichiers d'en-tête de deux méthodes déclare getLink
:
std::string getLink(void);
std::string getLink(int n);
Mais le fichier source déclare que le premier:
std::string hostersLink::getLink(void) {return Link;}
Mais SWIG crée des enveloppes pour ces deux fonctions qui se visse les choses. Je recommande de faire une des deux choses:
- Supprimer la méthode
std::string getLink(int n);
comme il est défini. - Ajouter une définition pour
std::string getLink(int n) { ... }