Уведомления

Группа в Telegram: @pythonsu

#1 Июль 10, 2008 18:27:35

severum
От:
Зарегистрирован: 2008-01-06
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

swig + python

пытаюсь по примеру сделать работающий модуль для функции fact.
вроде все как надо, но постоянно получаю в основном такую ошибку
example_wrap.obj : error LNK2019: unresolved external symbol “int __cdecl fact(int)” (?fact@@YAHH@Z) referenced in function __wrap_fact example.dll : fatal error LNK1120: 1 unresolved externals

файлы такие.

/* File: example.c */
#include “example.h”

int fact(int n) {
if (n < 0){ /* This should probably return an error, but this is simpler */
return 0;
}
if (n == 0) {
return 1;
}
else {
/* testing for overflow would be a good idea here */
return n * fact(n-1);
}
}



/* File: example.h */
int fact(int n);




/* File: example.i */
%module example

%{
#define SWIG_FILE_WITH_INIT
#include “example.h”
%}

int fact(int n);


#SConstruct
import sys
import os

include = Dir('C:\Python25\include')
libs = Dir('C:\Python25\libs')

env = Environment(platform = ‘win32’, CPPPATH = include, LIBPATH=libs, ENV = {'PATH' : os.environ})

dll = env.SharedLibrary(
target = ‘example’,
source = ,
SWIGFLAGS='-python -c++ -module example'
)


пробовал делать по шагам
и получившиеся файлы
example.c
example_wrap.cc
example.h
просто собрать в проект VS71
соотвествтвенно ошибка таже самая.
Если переименовать файл example_wrap.cc в example_wrap.c
то ошибки становяться другие
d:\MicrosoftVisualStudio71\Vc7\include\cstddef(17) : error C2143: syntax error : missing ‘{’ before ‘:’
d:\MicrosoftVisualStudio71\Vc7\include\cstddef(17) : error C2059: syntax error : ‘:’
d:\MicrosoftVisualStudio71\Vc7\include\cstddef(17) : error C2143: syntax error : missing ‘{’ before ‘:’
d:\MicrosoftVisualStudio71\Vc7\include\cstddef(17) : error C2059: syntax error : ‘:’
d:\MicrosoftVisualStudio71\Vc7\include\eh.h(32) : fatal error C1189: #error : “eh.h is only for C++!”
опять же не знаю почему..

Подскажите в чем проблема.
Спасибо



Офлайн

#2 Июль 10, 2008 20:48:54

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

swig + python

использовать SWIGFLAGS='-python -c -module example' как флаги если у тебя С, а не С++ код.
А еще лучше не использовать SWIG - гадость.



Офлайн

#3 Июль 11, 2008 12:26:43

severum
От:
Зарегистрирован: 2008-01-06
Сообщения: 54
Репутация: +  0  -
Профиль   Отправить e-mail  

swig + python

спасибо. я чтото проглядел.
а чем пользоваться?
boost? PyCXX?



Офлайн

#4 Июль 11, 2008 20:13:58

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

swig + python

boost - однозначно. И настоятельно рекомендую посмотреть на PY++ для генерирования оберток - сильно экономит время.
Еще камрад bialix утверждает, что для простых случаев pyrex весьма хорош.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version