gpt4 book ai didi

c++ - 所有可用的 swig+python+mingw 编译信息都过时了吗?

转载 作者:行者123 更新时间:2023-11-30 04:37:22 27 4
gpt4 key购买 nike

我正在尝试使用 swig 为 python 构建 C++ 扩展。我已按照下面的说明和其他说明进行操作,但似乎无法加载我的扩展程序。

我在 MinGW 网站上的“如何创建 Python 扩展?”下看到了这篇文章

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

我还找到了这些教程:

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

我正在使用 Panda3d-1.7.0 进行构建——win32 上的 Pandas 正在运行 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.

有什么提示或指示吗?谢谢!

最佳答案

验证两件事:

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

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

这两个加起来就是建议,以确保您在扩展 DLL 中采用的 ABI 与托管应用程序采用的 ABI 相匹配,并且您不会复制基本功能 block ,例如 CRT,它可能包含或管理难以在实例之间正确共享的状态。

编辑:改进后的问题编辑强烈说明 Microsoft 的 C++ ABI 和 GCC C++ ABI 之间存在不匹配的问题,即 known to differ .

关于c++ - 所有可用的 swig+python+mingw 编译信息都过时了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3860109/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com