Ошибка с swig:неопределенный символ:_ZN7hosters11hostersLink7getLinkEi

StackOverflow https://stackoverflow.com/questions/2511724

  •  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 -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

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

Спасибо.

Это было полезно?

Решение

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

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) { ... }
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top