【问题标题】:python c++ extension: symbol not defined errorpython c++ 扩展:符号未定义错误
【发布时间】:2013-08-17 14:18:43
【问题描述】:

我有一个可以工作的 c++ 代码,我想将它包装到 Windows XP 和 Python 2.7 上的 python 模块中。我以前从未这样做过,所以我研究了 swig 和 distutils。

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

python setup.py build_ext -c mingw32

脚本从我的module.imodule.cpp 文件创建module_wrap.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

显然这不起作用,但我不知道为什么。有谁能帮帮我吗?

【问题讨论】:

  • init_module是在C++中定义的吗?
  • 这个函数应该是swig定义的吧? module_wrap.cpp 不包含这样的功能。编辑:知道这种行为可能来自哪里吗?

标签: python windows python-2.7 swig distutils


【解决方案1】:

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

感谢您的支持!

【讨论】:

    猜你喜欢
    • 2020-07-13
    • 1970-01-01
    • 2019-11-12
    • 1970-01-01
    • 2014-06-01
    • 2015-01-28
    • 2020-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多