I'm trying to make a python binding for the this library:
http://code.google.com/p/hosterslib/.
I'm using swig, heres is the code:
%module pyhosters
%{
#include "hosters/hosters.hpp"
%}
%include "hosters/hosters.hpp"
I run
swig -c++ -python -o swig_wrap.cxx swig.i
and I compile with
g++ -O2 -fPIC -shared -o _pyhosters.so swig_wrap.cxx
python-config --libs --cflags
-lhosters -lcln -lhtmlcxxpkg-config libglog --libs --cflags
-I/usr/include/pyth开发者_开发知识库on2.6 -Wall -Wextra
But when I run python and I import it, I get:
>>> 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
How can I solve that?
Thanks.
That is the mangled name of:
hosters::hostersLink::getLink(int)
Make sure you have defined that function.
Okay, I took a closer look at hosters 0.6. The header files declares two getLink
methods:
std::string getLink(void);
std::string getLink(int n);
But the source file only declares the first one:
std::string hostersLink::getLink(void) {return Link;}
But SWIG is creating wrappers for both of those functions which screws things up. I recommend doing one of two things:
- Delete the
std::string getLink(int n);
method as it's undefined. - Add a definition for
std::string getLink(int n) { ... }
精彩评论