sma*_*jli 3 c python debian swig
我试图在使用SWIG的python脚本中使用.c程序.首先,我安装了SWIG并尝试了教程swig网页中的简单示例.
我正在使用Raspberry Pi和Raspbian GNU/Linux 9.4(拉伸)
这就是我所做的:
1 swig -python example.i.很好,这创建了两个新文件:'example.py'和'example_wrap.c'2
.gcc -fpic -I/usr/include/python2.7 -c example_wrap.c- 这会创建'example_wrap.o'文件
3.在Geany中编译example.c; 这给了'example.o'文件
4. gcc -shared example.o example_wrap.o -o example.so- 现在创建了一个新文件'example.so'.
是时候尝试了:
python
Run Code Online (Sandbox Code Playgroud)
我在这里使用Python 2.7.13
>>>import example
Run Code Online (Sandbox Code Playgroud)
这给了追溯:
File "<stdin>", line 1, in <module>
ImportError: dynamic module does not define init function (initexample)
Run Code Online (Sandbox Code Playgroud)
如何排除这个问题?
这是动态Python模块的情况(至少在当前的swig版本中):
%module example一个Python的动态模块必须实现的init*功能上解释[Python的2]:模块的方法表和初始化函数,以及更多:随之而来的后初始化部分,必须(符合模块的.so)名(在我们的情况下,它init_example).
通过命名动态模块example.so,当Python试图加载它时,它搜索了(显然)不存在的initexample,引发了ImportError.
将URL名称更改为_example.so(gcc -shared example.o example_wrap.o -o _example.so),不再引发异常.
然后,这些功能可用如下:
Run Code Online (Sandbox Code Playgroud)>>> import example # This imports example.py which automatically imports _example.so >>> example.fact(4), example.my_mod(7, 2), example.get_time()
| 归档时间: |
|
| 查看次数: |
2393 次 |
| 最近记录: |