2010-03-24 23 views
4

我試圖使一個Python的這個庫綁定:錯誤與痛飲:未定義的符號:_ZN7hosters11hostersLink7getLinkEi

http://code.google.com/p/hosterslib/

我使用痛飲,繼承人是代碼:

%module pyhosters  
%{  
#include "hosters/hosters.hpp"  
%}  
%include "hosters/hosters.hpp" 

我跑

痛飲-C++ -python -o swig_wrap.cxx swig.i

和我編譯

g ++ -O2 -fPIC -sha紅-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 

我該如何解決這個問題?

謝謝。

+0

使用標記(如果neccessary閱讀幫助),並檢查問題的外觀預覽,然後再發布。 – 2010-03-24 22:20:42

回答

6

就是說的重整名稱:

hosters::hostersLink::getLink(int) 

確保您已定義的功能。

好的,我仔細看了0.6主機。頭文件聲明瞭兩個getLink方法:

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

但源文件只聲明瞭第一個:

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

但呷被創建包裝兩種這些功能,這螺絲釘的事情了。我建議做兩件事之一:

  1. 刪除std::string getLink(int n);方法,因爲它是未定義的。
  2. 添加定義std::string getLink(int n) { ... }
+0

是的,它應該使用選項「-lhosters」來定義。 – Eduardo 2010-03-24 22:31:13

+0

@Eduardo - 它*應該*但它不是**定義它。我已經收錄了更多信息。 – 2010-03-24 22:35:08

+0

謝謝,我宣佈第二個意外,謝謝你花時間。 – Eduardo 2010-03-24 22:42:14