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 -lhtmlcxx pkg-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.

È stato utile?

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:

  1. Elimina il metodo std::string getLink(int n); come è definito.
  2. Aggiungi una definizione per std::string getLink(int n) { ... }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top