Python + SWIG
От: lizz Россия http://zetblog.ru
Дата: 13.01.09 13:39
Оценка:
Доброго времени суток! Помогите пожалуйста решить одну (или две проблему.

Вобщем откопал такую штуку, как swig, вроде бы неплохая вещь, но возникли некоторые трудности. Делаю всё, как в туториале на swig.org, ошибок никаких нет, но вот не могу обратиться к объявленой в сишном коде переменной и описаной там структуре. Функции при этом работают нормально.

Файл example.cxx:
/* File : example.c */

typedef struct V {
    double x,y,z;
} v;

int add(int a, int b) {
    return (a + b);
}


example.i:
/* example.i */
%module example
%{
/* Put header files here or function declarations like below */
#define SWIG_FILE_WITH_INIT
extern int add(int a, int b);
extern struct v;
%}

extern struct v;
int add(int a, int b);


swig -c++ -python example.i \
&& g++ -fPIC -c example.cxx \
&& g++ -fPIC -c example_wrap.cxx -I/usr/local/include/python2.5 \
&& g++ -shared example.o example_wrap.o -o _example.so


Получаем:
swig -c++ -python example.i &&  g++ -fPIC -c example.cxx &&  g++ -fPIC -c example_wrap.cxx -I/usr/local/include/python2.5 &&  g++ -shared example.o example_wrap.o -o _example.so
example_wrap.cxx:2601: error: a storage class can only be specified for objects and functions
*** Error code 1


Если убрать "extern" в "extern struct v;" — то питон ругается:
>>> example.v()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'module' object has no attribute 'v'


Куда дальше копать — не знаю. Помогите, плиз...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.