我正在尝试使用. c程序在python脚本与swig。首先,我安装了swig,并尝试简单的例子,从教程swig webpage。
我正在Raspbian GNU/Linux 9.4(扩展)中使用树莓派
我是这么做的:
swig -python example.i
-很好,这创建了两个新文件:"示例. py"和"示例_ Package . c"gcc -fpic -I/usr/include/python2.7 -c example_wrap.c
-这将创建"example_wrap. o"文件
3.在Geany中编译example. c;这给出了'example. o'文件gcc -shared example.o example_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)
如何解决这个问题?
2条答案
按热度按时间kx5bkwkv1#
这是动态 Python 模块的情况(至少在当前的 swig 版本中):
%module example
****_**${模块名称}。因此 *:一个动态模块或共享对象,其名称为模块名称前面加 * 下划线 *,在我们的示例中为 _example.so,其中包含实际的 C 编译代码
通过将动态模块命名为 * example.so ,当 Python 试图加载它时,它会搜索(显然)不存在的 initexample,从而引发 ImportError。
将模块名称更改为**_example.so***(
gcc -shared example.o example_wrap.o -o _example.so
)(如 URL 所示)不会再引发异常。然后,函数可用,如下所示:
可能还需要检查:
xytpbqjk2#
就像克里斯蒂·法蒂说的 “gcc -共享示例.o示例_ Package .o -o_示例. so”
命名错误并导致错误。