SWIG + setup.py: ImportError: dynamic module does not define init function (init_foo)
SWIG + setup.py: ImportError: dynamic module does not define init function (init_foo)
我正在尝试用 swig 将函数 foo 包装在 test.cpp
中。我有一个 header foo.h
,其中包含函数 foo 的声明。 test.cpp
依赖于位于 /usr/lib64
中的外部 header ex.h
和共享 object 文件 libex.so
我关注了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"],
)
似乎在使用 foo
和 _foo
时存在一些不一致,因为包装文件是编译和链接生成的。
尝试将 test.i
中的模块名称从
更改为
%module foo
至
%module _foo
或从
调整setup.py
中的扩展声明
Extension('_foo',
至
Extension('foo',
我有同样的错误,但这是由于正在使用 python。我使用的是 python2.7、python3.4 和 python3.5 的系统。只有 "python3"(符号链接到 python3.5)有效。与任何其他 pythons 一起导入会出现“导入错误:动态模块未定义初始化函数”错误。
我正在尝试用 swig 将函数 foo 包装在 test.cpp
中。我有一个 header foo.h
,其中包含函数 foo 的声明。 test.cpp
依赖于位于 /usr/lib64
ex.h
和共享 object 文件 libex.so
我关注了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"],
)
似乎在使用 foo
和 _foo
时存在一些不一致,因为包装文件是编译和链接生成的。
尝试将 test.i
中的模块名称从
%module foo
至
%module _foo
或从
调整setup.py
中的扩展声明
Extension('_foo',
至
Extension('foo',
我有同样的错误,但这是由于正在使用 python。我使用的是 python2.7、python3.4 和 python3.5 的系统。只有 "python3"(符号链接到 python3.5)有效。与任何其他 pythons 一起导入会出现“导入错误:动态模块未定义初始化函数”错误。