我有一个工作的c ++代码,我希望将其包装到Windows XP和Python 2.7上的python模块中。我之前从未这样做过,所以我调查了swig和distutils。
我创建了一个接口文件和一个setup.py,并使用
进行编译python setup.py build_ext -c mingw32
该脚本从我的module_wrap.cpp
和module.i
文件创建module.cpp
,然后创建module_wrap.o
和module.o
。 module.o
的创建为未使用的变量和不推荐使用的char *创建了一堆警告,但它似乎有效。因为C ++代码不是我的代码,所以我现在不想进入这些代码。
最后一步是执行
g++.exe -shared -s build\temp.win32-2.7\Release\module_wrap.o build\temp.win32-2.7\Release\module.o build\temp.win32-2.7\Release\_module.def -LC:\Programme\Python27\libs -LC:\Programme\Python27\PCbuild -lpython27 -o build\lib.win32-2.7\_module.pyd
我得到了
Cannot export init_module: symbol not defined
error: command 'g++' failed with exit status 1
我现在搜索了很多内容,我找不到解决这个问题的方法。之前创建的_module.def
似乎尝试导出此init,因为它包含
LIBRARY _module.pyd
EXPORTS
init_module
显然这不起作用,但我不明白为什么。任何人都可以帮助我吗?
答案 0 :(得分:1)
我明白了。问题是swig的(未发布)接口文件module.i
。在那里,我将模块命名为%module usemodule
,而在setup.py
中命名为模块name=module
。这样swig创建了一个init_function,它与创建的模块所期望的名称不匹配。最后:只是一个错字......
感谢您的支持!