使用swig出现错误:未定义符号:_ZN7hosters11hostersLink7getLinkEi。

4
我正在尝试为这个库创建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

我该如何解决这个问题?

谢谢。


使用标记(如有必要,请阅读帮助文档)并在发布前预览问题的外观。 - Georg Fritzsche
1个回答

5
这是一个错误的名称,应该是:
hosters::hostersLink::getLink(int)

请确认您已经定义了该函数。

好的,我仔细查看了hosters0.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) { ... } 的定义。

是的,它应该使用选项“-lhosters”进行定义。 - user301649
@Eduardo - 它应该,但它没有定义它。我已经包含了更多的信息。 - R Samuel Klatchko
谢谢,我不小心声明了第二个,感谢您抽出时间来。 - user301649

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接