WindowsError:[错误126]加载带有ctypes的DLL时

时间:2012-05-02 10:13:51

标签: python windows dll ctypes

这在使用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”扩展名。什么都行不通。

2 个答案:

答案 0 :(得分:22)

错误126是无法找到从属DLL时获得的错误。有两个明显的原因:

  1. 找不到您的DLL。
  2. 您的DLL依赖于无法找到的其他DLL。
  3. 我怀疑选项1是问题,但无论如何我认为我可能会使用该DLL的完整路径来确定。

    因此,留下选项2,最常见的原因是您的目标计算机没有安装C ++运行时。在构建DLL时,在目标计算机上安装C ++运行时,或使用静态链接/MT,这样就不需要重新分配运行时。

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

答案 1 :(得分:0)

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