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 -共有 -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

どうすれば解決できますか?

ありがとう。

4

1 に答える 1

5

それは以下のマングル名です:

hosters::hostersLink::getLink(int)

その関数が定義されていることを確認してください。

さて、hosters 0.6 を詳しく調べてみました。ヘッダー ファイルでは、次の 2 つのgetLinkメソッドが宣言されています。

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

しかし、ソースファイルは最初のものだけを宣言しています:

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

しかし、SWIG はこれらの関数の両方のラッパーを作成しており、これが事態を台無しにしています。次の 2 つのいずれかを行うことをお勧めします。

  1. std::string getLink(int n);メソッドは未定義なので削除します。
  2. の定義を追加std::string getLink(int n) { ... }
于 2010-03-24T22:24:53.420 に答える