我无法在Windows上重现基本的SWIG示例。 我的错误已在SWIG文档中说明,我确信我执行了他们提到的两个修复操作。针对此错误:
>>> import example
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "example.py", line 2, in ?
import _example
ImportError: No module named _example
SWIG文档明确指出:
忘记前导下划线(_)。
如果您收到此消息,则意味着
您要么忘记将包装器代码编译为扩展模块,要么没有给扩展模块正确的名称。确保您将包装器编译为名为example.so的模块。不要忘记前导下划线(_)。
而我确定已经链接了最新的包装对象构建,并尝试过:" _example","_example.so","example.dll","example.so","example.dll",甚至同时使用所有这些方式;并且生成的" example.py "与共享库在同一文件夹中,并且Python路径包含此目录。忘记前导下划线()。
示例:
//example.h
int foo_sum(int a, int b);
.
//example.cpp
int foo_sum(int a, int b) {
return a + b;
}
.
//example.i
%module example
%{
#include "example.h"
%}
#include "example.h
还有构建命令:
gcc -IV:\temp\example\external\include\Python -O3 -Wall -c -fmessage-length=0 -oexample_wrap.o ..\example_wrap.c
g++ -IV:\temp\example\external\include\Python -O3 -Wall -c -fmessage-length=0 -oexample.o ..\example.cpp
g++ -LV:\temp\example\external\lib -shared -oexample.dll example_wrap.o example.o -lpython26
即使我不使用-O3,它仍然无法工作(我从发布配置中复制了构建命令)。
我也尝试过这个,但没有成功:
>>> import sys
>>> sys.path.append("/your/module/path")
>>> import example
编辑:
显然,如果你将dll文件重命名为“_example.pyd”,它会加载,但是加载的模块不包含我的“foo_sum”函数。
编辑: 现在它可以工作了,我正在使用extern "C" ,并且没有在.i文件中包含头文件。