Errore con sorso: undefined symbol: _ZN7hosters11hostersLink7getLinkEi
-
22-09-2019 - |
Domanda
Sto cercando di fare un pitone vincolante per l'questa libreria:
http://code.google.com/p/hosterslib/ .
sto usando sorso, ecco è il codice:
%module pyhosters
%{
#include "hosters/hosters.hpp"
%}
%include "hosters/hosters.hpp"
corro
sorso -c ++ -python -o swig_wrap.cxx swig.i
e compilo con
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
Ma quando corro Python e ho importare, ottengo:
>>> 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
Come posso risolvere questo?
Grazie.
Soluzione
Questo è il nome storpiato di:
hosters::hostersLink::getLink(int)
Assicurarsi di aver definito tale funzione.
Va bene, ho preso uno sguardo più da vicino a hoster 0.6. I file di intestazione dichiara due metodi getLink
:
std::string getLink(void);
std::string getLink(int n);
Ma il file sorgente dichiara solo il primo:
std::string hostersLink::getLink(void) {return Link;}
Ma SWIG sta creando involucri per entrambe le funzioni che si avvita le cose. Vi consiglio di fare una delle due cose:
- Elimina il metodo
std::string getLink(int n);
come è definito. - Aggiungi una definizione per
std::string getLink(int n) { ... }