13

これは、Python2.7を搭載したWindows7で正常に機能します。

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

ライブラリprov_means.DLLは私の作業ディレクトリにあります。依存関係のない単純なスタンドアロンC関数provmeans()をエクスポートします。

WindowsXPとPython2.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が見つからない場合に発生するものです。これには2つの明らかな原因があります。

  1. DLLが見つかりません。
  2. DLLは、見つからない他のDLLに依存しています。

オプション1が問題であるとは思えませんが、いずれにせよ、確かにそのDLLへのフルパスを使用していると思います。

そのため、オプション2が残ります。その最も一般的な原因は、ターゲットマシンにC++ランタイムがインストールされていないことです。DLLをビルドするときにC++ランタイムをターゲットマシンにインストールするか、静的リンクを使用/MTして、ランタイムを再配布する必要がないようにします。

おそらく、DLLを開発したマシンに、C ++コンパイラがインストールされており、ランタイムがインストールされています。コードが失敗するターゲットマシンでは、コンパイラがインストールされていないため、ランタイムが存在しません。

于 2012-05-02T11:37:47.797 に答える
0

ライブラリの構築にどのコンパイラを使用しましたか?必要なライブラリが不足している可能性がありますか?Dependency Walker(http://www.dependencywalker.com/)を使用して、ライブラリにどのような依存関係があるかを確認できますか?

于 2012-05-02T11:16:41.607 に答える