SWIG + setup.py:ImportError:dynamic模块没有定义init函数(init_foo)

我想用swig在test.cpp包装一个函数foo。 我有一个包含foo函数声明的foo.h头文件。 test.cpp依赖于位于/usr/lib64的外部头文件ex.h和共享目标文件libex.so

我从这里跟随博客文章 。

我能够用python setup.py build_ext --inplace构build模块。 但是,当我尝试导入它,我得到以下错误,我不知道我失踪,因为大多数其他问题与此错误不使用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"], ) 

看起来像使用foo_foo有一些不一致,因为生成的wrap文件被编译和链接到。

尝试改变test.i的模块名称

 %module foo 

 %module _foo 

或从您的setup.py调整扩展声明

 Extension('_foo', 

 Extension('foo',