web-dev-qa-db-fra.com

WindowsError: [Erreur 126] lors du chargement d'un DLL avec des types

Cela fonctionne bien sous Windows 7 avec Python 2.7:

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

La bibliothèque prov_means.DLL se trouve dans mon répertoire de travail. Il exporte une fonction C simple et autonome, provmeans (), sans dépendance. 

Lorsque j'essaie la même chose sous Windows XP et Python 2.7, je reçois

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 

J'ai essayé de copier le DLL vers Windows\System32 et de saisir le nom du chemin complet

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

avec et sans l'extension ".DLL". Rien ne fonctionne.

12
MortCanty

L'erreur 126 correspond à ce que vous obtenez lorsqu'un DLL dépendant _ ne peut pas être trouvé. Il y a deux causes évidentes à cela:

  1. Votre DLL n'est pas en cours de localisation. 
  2. Votre DLL dépend d'autres DLL introuvables.

Je doute que l'option 1 soit le problème, mais dans tous les cas, je pense que j'utiliserais probablement un chemin complet vers ce DLL pour en être sûr.

Cela laisse donc l'option 2 et la cause la plus courante est que le runtime C++ n'est pas installé sur votre machine cible. Installez le runtime C++ sur votre machine cible ou utilisez un lien statique, /MT , lors de la construction de votre DLL, de sorte que vous n'ayez pas besoin de redistribuer le runtime.

Probablement, sur la machine sur laquelle vous avez développé la DLL, vous avez installé un compilateur C++ et qui a installé le runtime pour vous. Sur votre ordinateur cible, où le code échoue, vous n'avez pas installé le compilateur et le runtime n'est donc pas présent.

22
David Heffernan

Quel compilateur avez-vous utilisé pour construire la bibliothèque? Peut-être qu'il manque des bibliothèques obligatoires? Vous pouvez vérifier les dépendances de la bibliothèque avec Dependency Walker (http://www.dependencywalker.com/). 

0
uhz