Я пытаюсь обернуть функцию foo в test.cpp
с помощью swig. У меня есть заголовок foo.h
, который содержит объявление функции foo. test.cpp
зависит от наличия внешнего заголовка ex.h
и общего файла объект libex.so
, расположенного в /usr/lib64
SWIG + setup.py: ImportError: динамический модуль не определяет функцию init (init_foo)
Я следовал за blog post from here.
Я могу построить модуль с python setup.py build_ext --inplace
. Однако, когда я пытаюсь импортировать его, я получаю следующую ошибку, и я не уверен, что мне не хватает, поскольку большинство других вопросов с этой ошибкой не используют файл setup.py
. Ниже приведен пример того, что у меня есть.
Ошибка на импортера _foo:
>>> import _foo
ImportError: dynamic module does not define init function (init_foo)
test.i
%module foo
%{
#pragma warning(disable : 4996)
#define SWIG_FILE_WITH_INIT
#include "test.h"
%}
%include <std_vector.i>
%include <std_string.i>
%include "test.h"
test.cpp
#include "ex.h"
void foo(int i){
return;
};
test.h
#include "ex.h"
void foo(int i);
setup.py
try:
from setuptools.command.build_ext import build_ext
from setuptools import setup, Extension, Command
except:
from distutils.command.build_ext import build_ext
from distutils import setup, Extension, Command
foo_module = Extension('_foo',
sources=['foo.i' , 'foo.cpp'],
swig_opts=['-c++'],
library_dirs=['/usr/lib64'],
libraries=['ex'],
include_dirs = ['/usr/include'],
extra_compile_args = ['-DNDEBUG', '-DUNIX', '-D__UNIX', '-m64', '-fPIC', '-O2', '-w', '-fmessage-length=0'])
setup(name='mymodule',
ext_modules=[foo_module],
py_modules=["foo"],
)
вы видите это создать файл обруча компиляции сгенерированный файл и связывающий что в модуль? Что-то вроде 'swig -python -C++ -o foo_wrap.cpp foo.i',' gcc ... foo_wrap.cpp ... ',' g ++ ... foo_wrap.o ... 'как в выводе в блоге – Thomas
@Thomas Да, есть длинный/похожий вывод. Я опубликую то, что я вижу в данный момент. – pyCthon
@ Томас вот выход, http://pastebin.com/MSChdNMy – pyCthon