Ошибка с swig: неопределенный символ: _ZN7hosters11hostersLink7getLinkEi - PullRequest
4 голосов
/ 25 марта 2010

Я пытаюсь сделать привязку 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 -lhtmlcxx pkg-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

Как я могу решить это?

Спасибо.

1 Ответ

5 голосов
/ 25 марта 2010

Это искаженное имя:

hosters::hostersLink::getLink(int)

Убедитесь, что вы определили эту функцию.

Хорошо, я поближе посмотрел на хостеров 0.6. Заголовочные файлы объявляют два getLink метода:

std::string getLink(void);
std::string getLink(int n);

Но исходный файл объявляет только первый:

std::string hostersLink::getLink(void) {return Link;}

Но SWIG создает обертки для обеих функций, которые все портят. Я рекомендую сделать одну из двух вещей:

  1. Удалите метод std::string getLink(int n);, поскольку он не определен.
  2. Добавить определение для std::string getLink(int n) { ... }
...