WindowsError: [Ошибка 126] при загрузке DLL с помощью ctypes

Это отлично работает в Windows 7 с Python 2.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" и без него. Ничего не работает.

Ответ 1

Ошибка 126 - это то, что вы получаете, когда не удается найти зависимую DLL. Для этого есть две очевидные причины:

  • Ваша DLL не находится.
  • Ваша библиотека DLL зависит только от других DLL, которые не могут быть найдены.

Я сомневаюсь, что вариант 1 является проблемой, но в любом случае я думаю, что, вероятно, я бы использовал полный путь к этой DLL.

Таким образом, это оставляет вариант 2, и наиболее распространенной причиной этого является то, что на вашей целевой машине не установлена ​​среда выполнения С++. Либо установите время выполнения С++ на целевую машину, либо используйте статическое связывание /MT при создании вашей DLL, чтобы вам не нужно было перераспределять время выполнения.

Возможно, на компьютере, на котором была разработана DLL, вы установили компилятор С++ и установили для него время выполнения. На вашей целевой машине, где код выходит из строя, вы не установили компилятор, и поэтому время выполнения отсутствует.

Ответ 2

Какой компилятор вы использовали для создания библиотеки? Может быть, некоторые необходимые библиотеки отсутствуют? Вы можете проверить, какие зависимости имеет библиотека с Dependency Walker (http://www.dependencywalker.com/)?