是所有可用的swig + python + mingw编译信息已过时?

时间:2010-10-05 00:28:05

标签: c++ python swig

我正在尝试使用swig为python构建C ++扩展。我按照下面的说明和其他人到T,似乎无法加载我的扩展。

我在MinGW网站的“我如何创建Python扩展?”

下浏览了这篇文章

http://www.mingw.org/wiki/FAQ

我还找到了这些教程:

http://boodebr.org/main/python/build-windows-extensions http://www.mail-archive.com/modwsgi@googlegroups.com/msg04655.html http://oldwiki.mingw.org/index.php/Python%20extensions

我正在使用Panda3d-1.7.0进行构建 - 在win32上运行panda正在运行python2.6.4(MSC v.1500编译)。我正在使用MinGW gcc / g ++(GCC)3.4.5进行编译。

我注意到当我使用以下命令运行setup.py时:

python setup.py build -cmingw32

首先运行gcc.exe,然后运行g ++。exe来构建pyd。 g ++链接:-lpython26 -lmsvcr90

她构建并链接得足够好(没有错误)但是,当我将_extension.pyd和extension.py文件复制到Panda3d-1.7.0 \ python \ Lib \ site-packages并运行> python -c“import extension”从命令行开始,Python转储如下:

Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "C:\Panda3D-1.7.0\python\Lib\site-packages\extension.py", line 25, in <module>
    _bullet = swig_import_helper()
  File "C:\Panda3D-1.7.0\python\Lib\site-packages\extension.py", line 21, in swig_import_helper
    _mod = imp.load_module('_extension', fp, pathname, description)
ImportError: DLL load failed: The specified module could not be found.

任何提示或指示?谢谢!

CT

1 个答案:

答案 0 :(得分:2)

要验证两件事:

  • 使用dependency walker检查绑定到python和扩展DLL的C运行时库DLL,以确保它们使用相同的CRT。在为其他语言构建扩展时,这是常见的问题来源。 (例如,我经常看到Lua)并且可能导致有趣且间歇性的错误,特别难以追踪。

  • IIRC,Windows的“官方”Python版本已从MinGW切换到Visual Studio Express。这可能使得几乎不可能使用MinGW来构建C ++扩展,可以从编译并与Visual Studio链接的Python调用,因为C ++ ABI存在不可调和的差异。

这两个加起来建议确保您在扩展DLL中假设的ABI与托管应用程序假定的ABI匹配,并且您没有复制基本功能块,例如可能包含的CRT或管理难以在实例之间正确共享的状态。

编辑:问题的改进编辑强调微软的C ++ ABI与GCC C ++ ABI known to differ之间存在不匹配问题。