python c ++扩展:符号未定义错误

时间:2013-08-15 11:38:09

标签: python windows python-2.7 swig distutils

我有一个工作的c ++代码,我希望将其包装到Windows XP和Python 2.7上的python模块中。我之前从未这样做过,所以我调查了swig和distutils。

我创建了一个接口文件和一个setup.py,并使用

进行编译
python setup.py build_ext -c mingw32

该脚本从我的module_wrap.cppmodule.i文件创建module.cpp,然后创建module_wrap.omodule.omodule.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

显然这不起作用,但我不明白为什么。任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

我明白了。问题是swig的(未发布)接口文件module.i。在那里,我将模块命名为%module usemodule,而在setup.py中命名为模块name=module。这样swig创建了一个init_function,它与创建的模块所期望的名称不匹配。最后:只是一个错字......

感谢您的支持!