在 WinXP、VisualStudio 2005 上的 boost.python“DLL 加载失败”

Posted

技术标签:

【中文标题】在 WinXP、VisualStudio 2005 上的 boost.python“DLL 加载失败”【英文标题】:boost.python "DLL load failed" on WinXP, VisualStudio 2005 【发布时间】:2011-06-27 12:07:45 【问题描述】:

我在 WinXP-32 上导入 boost-python 模块时遇到问题。 我正在使用 boostpro 和 VC++8 (VisualStudio 2005) 的 python 2.6.6、boost.python 1.41 预编译库。

编译下面这段代码后,我尝试从python命令行导入生成的pyHELLO.pyd,总是得到:

"ImportError: DLL load failed: This 应用程序无法启动 因为应用程序配置 是不正确的。重新安装 应用程序可能会解决此问题。”

我重新安装了 python 并尝试了其他的 boost 版本。但这些都没有帮助。

我尝试导入模块的目录中有相应的 boost dll。

相同的代码在 Win7 下与 VC++9 一起工作。

代码如下:

int sayHello() 
    cout << "Hello  !" << endl; 



BOOST_PYTHON_MODULE(pyBoostTest)

    def("sayHello", sayHello);

非常感谢任何帮助。

【问题讨论】:

您的 Python .exe 是否具有指定 MSVCRT 的 SxS 详细信息的应用程序清单? 你的意思是boost python 1.41吗? 1.我是 Windows 新手,不知道清单的东西,但依赖项步行器告诉我 python.exe 依赖于位于 winsxs 文件夹中的 MSVCR90.dll (如果这就是你的意思) 2. 是,它是boost python 1.41 解决了这个问题。缺少 boost.python dll 所依赖的 MSVC80CRT dll 的正确版本。于是我从MS下载了对应的redist包并安装了。现在它起作用了。 dependencywalker 不显示此 dll 缺少的依赖项。我阅读了一些关于清单和 SxS 的内容,并查看了 dll 标头以查看需要哪个 CRT 版本。感谢大卫对此的暗示。 请将其添加为您原始问题的答案,以便您可以将其标记为已解决,以便您收到赏金。 【参考方案1】:

已解决:

我的机器上缺少 boost.python dll 所依赖的 MSVC80CRT dll 的正确版本。我从MS下载了相应的redist包并安装了它。现在它起作用了。

dependencywalker 没有显示此 dll 缺少的依赖项。 在阅读了清单和 SxS 之后,我发现声明了正确的 dll 版本 在本身嵌入在 dll 标头中的清单中。

如果您在 Visual Studio 中打开一个 dll,您可以阅读该信息。然后你检查是否 dll 版本存在于 c:\windows\winsxs 文件夹中。如果没有,您可以找回丢失的 dll 通过从 MS 下载相应的“redist”包。直接搜索dll版本即可。

感谢 David 提供有关清单的提示。

【讨论】:

以上是关于在 WinXP、VisualStudio 2005 上的 boost.python“DLL 加载失败”的主要内容,如果未能解决你的问题,请参考以下文章

Win 7 x64 + Visual Studio 2015为WinXP编译可执行程序

如何在 WinXP 上为使用 Visual Studio 2013 构建的应用程序进行远程调试?

使用visual studio 2008创建的windows应用程序是不是可以在没有.net框架的winXP上运行

PostSharp 对 Visual Studio 2005 的支持?

Visual Studio 2012 与 Visual Studio 2005 中的小程序慢得多

SQL2005、VS.NET2005有啥新功能?