Ошибка с swig:неопределенный символ:_ZN7hosters11hostersLink7getLinkEi
-
22-09-2019 - |
Вопрос
Я пытаюсь сделать привязку Python для этой библиотеки:
http://code.google.com/p/hosterslib/.
Я использую Swig, вот код:
%module pyhosters
%{
#include "hosters/hosters.hpp"
%}
%include "hosters/hosters.hpp"
я бегу
swig -c++ -python -o swig_wrap.cxx swig.i
и я компилирую с
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
Но когда я запускаю Python и импортирую его, я получаю:
>>> 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
Как я могу это решить?
Спасибо.
Решение
Это искаженное имя:
hosters::hostersLink::getLink(int)
Убедитесь, что вы определили эту функцию.
Ладно, я присмотрелся к хостерам 0.6.В заголовочных файлах объявлены два getLink
методы:
std::string getLink(void);
std::string getLink(int n);
Но исходный файл объявляет только первый:
std::string hostersLink::getLink(void) {return Link;}
Но SWIG создает оболочки для обеих этих функций, что все портит.Я рекомендую сделать одно из двух:
- Удалить
std::string getLink(int n);
метод, поскольку он не определен. - Добавьте определение для
std::string getLink(int n) { ... }