【问题标题】:Error with swig: undefined symbol: _ZN7hosters11hostersLink7getLinkEi痛饮错误:未定义符号:_ZN7hosters11hostersLink7getLinkEi
【发布时间】:2011-01-31 11:43:20
【问题描述】:

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

我该如何解决?

谢谢。

【问题讨论】:

  • 使用标记(必要时阅读帮助)并在发布前检查问题在预览中的外观。

标签: c++ swig undefined-symbol


【解决方案1】:

这是以下名称的错位:

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) { ... } 添加定义

【讨论】:

  • 是的,它应该使用选项“-lhosters”来定义。
  • @Eduardo - 它应该但它定义它。我已经包含了更多信息。
  • 谢谢你,我无意中宣布了第二个,谢谢你抽出时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-10
  • 2013-10-22
  • 2014-06-01
  • 2015-11-13
相关资源
最近更新 更多