c程序SWIG到python给出';ImportError:动态模块未定义初始化函数';
我正在尝试使用带有SWIG的python脚本中的.c程序。首先,我安装了SWIG并尝试了教程中的简单示例 我在Raspbian GNU/Linux 9.4(stretch)中使用Raspberry Pi 我就是这么做的:c程序SWIG到python给出';ImportError:动态模块未定义初始化函数';,python,c,debian,swig,Python,C,Debian,Swig,我正在尝试使用带有SWIG的python脚本中的.c程序。首先,我安装了SWIG并尝试了教程中的简单示例 我在Raspbian GNU/Linux 9.4(stretch)中使用Raspberry Pi 我就是这么做的: 1. swig-python example.i-很好,这创建了两个新文件:“example.py”和“example\u wrap.c” 2. gcc-fpic-I/usr/include/python2.7-c example\u wrap.c-这将创建“example\u
1.
swig-python example.i
-很好,这创建了两个新文件:“example.py”和“example\u wrap.c”2.
gcc-fpic-I/usr/include/python2.7-c example\u wrap.c
-这将创建“example\u wrap.o”文件3.在Geany中编译example.c;这将给出“example.o”文件
4.
gcc-sharedexample.o example\u wrap.o-o example.so
-现在创建了一个新文件“example.so”。是时候试试了:
python
我在这里使用的是Python 2.7.13
>>>import example
这提供了回溯:
File "<stdin>", line 1, in <module>
ImportError: dynamic module does not define init function (initexample)
文件“”,第1行,在
ImportError:动态模块未定义初始化函数(初始化示例)
如何解决这个问题?就像CristiFati说的“gcc-shared example.o example\u wrap.o-o\u example.so”
命名错误并导致错误 这是动态Python模块的情况(至少在当前swig版本中):
- 模块名称(让我们继续使用示例,就像在教程中一样)在.i文件中指定:
%module example
- 在生成时,将生成2个文件:
- \${MODULE_NAME}.so:一个动态模块或共享对象,其名称前面有一个下划线,在我们的示例_example.so中,它包含实际的C编译代码
- ${MODULE_NAME}.py:它是上一个的包装器;example.py-这是模块“入口点”
将模块名称更改为\u example.so(
gcc-shared example.o example\u wrap.o-o\u example.so
),正如URL所指示的,不再引发异常
然后,功能如下所示:
导入示例#此导入example.py,它会自动导入_example.so
>>>example.fact(4),example.my_mod(7,2),example.get_time()
gcc-shared example.o example\u wrap.o-o\u example.so
@CrisFati您的解决方案部分工作:当我在python解释器中执行“导入示例”时,它不会提供回溯,但稍后执行例如fract(4)时,它会说:“NameError:name'fact'未定义。”,当我以这种方式启动python时:“python-I example.py”我不需要导入任何东西,事实(4)给出了24的正确答案。现在的问题是什么?示例。事实(4)
(点不是空格)。名字是fact
(你的评论也提到了fract
)。太棒了!你可以回答。还有第二条评论。这是这个主题的重要一点。