gpt4 book ai didi

python - SWIG + setup.py : ImportError: dynamic module does not define init function (init_foo)

转载 作者:IT王子 更新时间:2023-10-29 00:07:20 26 4
gpt4 key购买 nike

我正在尝试用 swig 在 test.cpp 中包装函数 foo。我有一个 header foo.h,其中包含函数 foo 的声明。 test.cpp 依赖于位于 /usr/lib64< 中的外部 header ex.h 和共享对象文件 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)

测试.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"

测试.cpp

#include "ex.h"

void foo(int i){
return;
};

测试.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 - SWIG + setup.py : ImportError: dynamic module does not define init function (init_foo),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35947972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com