在WinXP,VisualStudio 2005上使用boost.python时出现“DLL加载失败”的错误。

3
我在WinXP-32上导入boost-python模块时遇到了问题。我使用的是python 2.6.6、由boostpro提供的预编译库boost.python 1.41和VC++8(VisualStudio 2005)。
在编译以下代码后,我尝试从python命令行导入生成的pyHELLO.pyd,但总是会得到如下错误:
“ImportError: DLL load failed: This application has failed to start because the application configuration is incorrect. Reinstalling the application may fix this problem.”
我重新安装了python并尝试了其他boost版本。但是没有帮助。
我在尝试导入模块的目录中有相应的boost dlls。
相同的代码在Win7下的VC++9上可正常工作。
以下是代码:
int sayHello() {
    cout << "Hello  !" << endl; 
}


BOOST_PYTHON_MODULE(pyBoostTest)
{
    def("sayHello", sayHello);
}

非常感谢您的帮助。


2
你的Python .exe文件是否有一个应用程序清单,指定了MSVCRT的SxS细节? - David Heffernan
你是指 Boost Python 1.41 吗? - Matthew Scouten
  1. 我是Windows的新手,不了解清单文件的事情,但依赖项检查器向我显示python.exe依赖于位于winsxs文件夹中的MSVCR90.dll(如果这就是你的意思)。
  2. 是的,它是boost python 1.41。
- Romain Scherfflein
已解决。缺少boost.python dll所依赖的MSVC80CRT dll的正确版本。因此,我从微软下载了相应的redist包并安装了它。现在它可以工作了。Dependencywalker没有显示此dll的缺失依赖项。 我阅读了一些关于清单和SxS的内容,并查看了dll头文件以查看需要哪个CRT版本。感谢David提供的提示。 - Romain Scherfflein
请将此内容添加到您的原始问题答案中,以便您可以标记它为已解决并获得悬赏。 - Miriam
1个回答

0

已解决:

我的机器上缺少了boost.python dll所依赖的MSVC80CRT dll的正确版本。我从微软下载了相应的redist包并安装了它。现在它可以正常工作了。

Dependencywalker没有显示此dll的缺失依赖项。在阅读有关清单和SxS的文章后,我发现正确的dll版本在清单中声明,而清单本身嵌入在dll头中。

如果您在Visual Studio中打开一个dll,您可以阅读其中的信息。然后,您可以检查c:\windows\winsxs文件夹中是否存在dll版本。如果没有,您可以通过从微软下载相应的“redist”包来检索缺失的dll。只需搜索dll版本即可。

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接