2010-03-24 6 views
4

Je suis en train de faire un python contraignant pour la cette bibliothèque:erreur avec rasade: non défini symbole: _ZN7hosters11hostersLink7getLinkEi

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 compiler avec

g ++ -O2 -fPIC -sha rouge -o _pyhosters.so swig_wrap.cxx python-config --libs --cflags -lhosters -lcln -lhtmlcxx pkg-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 ce problème?

Merci.

+0

balisage utilisation (lire l'aide si necesesaire) et vérifier la façon dont la question a l'air dans l'aperçu avant de poster. –

Répondre

6

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 les hébergeurs 0.6. Les fichiers d'en-tête déclare deux getLink méthodes:

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 est en train de créer des emballages pour ces deux fonctions qui les choses de vis vers le haut. Je recommande de faire l'une des deux choses suivantes:

  1. Supprimez la méthode std::string getLink(int n); car elle n'est pas définie.
  2. Ajouter une définition pour std::string getLink(int n) { ... }
+0

Oui, il devrait être défini avec l'option "-lhosters". – Eduardo

+0

@Eduardo - ça * devrait * mais c'est ** pas ** le définir. J'ai inclus plus d'informations. –

+0

Merci, j'ai déclaré la deuxième accidentellement, merci de prendre votre temps. – Eduardo

Questions connexes