13

这在带有 Python 2.7 的 Windows 7 上运行良好:

lib = ctypes.cdll.LoadLibrary('prov_means')
provmeans = lib.provmeans  

库 prov_means.DLL 在我的工作目录中。它导出一个简单的、独立的 C 函数 provmeans(),没有依赖关系。

当我在 Windows XP 和 Python 2.7 上尝试同样的事情时,我得到了

Traceback (most recent call last):
  File "D:\python\Auxil\src\auxil.py", line 130, in <module>
    lib = ctypes.cdll.LoadLibrary('prov_means')
  File "C:\Python27\lib\ctypes\__init__.py", line 431, in LoadLibrary
    return self._dlltype(name)
  File "C:\Python27\lib\ctypes\__init__.py", line 353, in __init__
    self._handle = _dlopen(self._name, mode)
WindowsError: [Error 126] The specified module could not be found 

我尝试将 DLL 复制到 Windows\System32 并输入完整路径名

"d:\\python\\auxil\\src\\prov_means"

有和没有“.DLL”扩展名。没有任何效果。

4

2 回答 2

22

错误 126 是当无法找到依赖 DLL 时出现的错误。这有两个明显的原因:

  1. 找不到您的 DLL。
  2. 您的 DLL 依赖于其他无法找到的 DLL。

我怀疑选项 1 是问题,但无论如何我认为我可能会使用该 DLL 的完整路径来确定。

所以剩下的选项 2 和最常见的原因是你的目标机器没有安装 C++ 运行时。在您的目标机器上安装 C++ 运行时,或者/MT在构建 DLL 时使用静态链接,这样您就不需要重新分发运行时。

可能,在您开发 DLL 的机器上,您已经安装了 C++ 编译器并为您安装了运行时。在代码失败的目标机器上,您尚未安装编译器,因此运行时不存在。

于 2012-05-02T11:37:47.797 回答
0

您使用哪个编译器来构建库?也许缺少一些必需的库?您可以使用 Dependency Walker (http://www.dependencywalker.com/) 检查库具有哪些依赖项?

于 2012-05-02T11:16:41.607 回答