我想用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',