我无法在Windows上重现基本的SWIG示例。 我的错误在SWIG文档中说明,我确信我会提到他们提到的2个修复程序。对于此错误:
>>> 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文件明确指出:
忘记前导下划线(_)。
忘记前导下划线(_)。&gt;如果收到此消息,则表示
你忘了编译了 包装器代码到扩展模块中 或者你没有给出扩展名 模块正确的名称。确保这一点 你把包装器编译成了一个 名为 example.so的模块。不要 忘记前导下划线()。忘记前导下划线(_)。
我确信我链接了最新的wrap对象构建,我试过了:“_ 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文件中的标题
答案 0 :(得分:3)
库的文件名必须是* .pyd。我想你已经生成了一个包装器代码并将它们链接在一起。
答案 1 :(得分:1)
我发现你必须将C ++在.dll上生成的库文件重命名为.pyd。我不记得你是否需要在苹果上重命名它。并且你想要暴露给python的函数必须在它之前有extern“C”。否则,编译器不会使该函数在库外部可访问。另外如果我想如果你想在python中使用它们,你需要将返回值包装在Py_value中。
答案 2 :(得分:0)
我发现(在windows中),如果你创建一个dll,它必须被称为_modulename.pyd 这个库(_modulename.pyd),原始的c ++模块myapp.dll和生成的modulename.py必须在路径中以及pythonxx.exe