Форум сайта python.su
пытаюсь по примеру сделать работающий модуль для функции 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++!”
опять же не знаю почему..
Подскажите в чем проблема.
Спасибо
Офлайн
использовать SWIGFLAGS='-python -c -module example' как флаги если у тебя С, а не С++ код.
А еще лучше не использовать SWIG - гадость.
Офлайн
спасибо. я чтото проглядел.
а чем пользоваться?
boost? PyCXX?
Офлайн
boost - однозначно. И настоятельно рекомендую посмотреть на PY++ для генерирования оберток - сильно экономит время.
Еще камрад bialix утверждает, что для простых случаев pyrex весьма хорош.
Офлайн