12

チュートリアルのNetBeansプロジェクトが あり、例外が発生します。

スレッド"main" java.lang.UnsatisfiedLinkError: Unable to load library 'simpleDLL'の例外:指定されたモジュールが見つかりませんでした。

simpleDLL.dllをプロジェクトライブラリに入れようとしましたが、ファイルをsystem32フォルダーにコピーしましたが成功しませんでした。

4

5 に答える 5

12

DLLのロードでまったく同じ問題が発生しましたが、次のように解決しました。

  • Christian Kuetbachが言ったように、使用しているsimpleDLLがプロセッサのアーキテクチャと互換性があるかどうかを確認してください。32ビットDLLは64ビットマシンでは機能せず、64ビットDLLは32ビットマシンでは機能しません。ビットマシン。

  • DLLに互換性がある場合は、Javaライブラリパスに問題がある可能性があります。DLLをuser.dirディレクトリに配置してから、次のコードを使用しました。

    Javaライブラリパスを必要なパスuser.dirまたは別のパスに設定します。

     String myLibraryPath = System.getProperty("user.dir");//or another absolute or relative path
    
     System.setProperty("java.library.path", myLibraryPath);
    

    ライブラリをロードします。

     System.loadLibrary("libraryWithoutDLLExtension");
    

それは私のために働いた、それを試してみて、それがあなたのために働くかどうか教えてください。

于 2013-01-12T00:01:56.747 に答える
5

simpleDLLが32ビットか64ビットかを確認してください。次に、JVMも32ビットか64ビットかを確認します。それらは同じプラットフォーム用である必要があります。

http://www.chilkatsoft.com/p/p_499.asp に変更loadLibrary()した場合は、絶対パスを指定することもできますload()

于 2013-01-11T22:51:00.090 に答える
2

32ビット(Xp)でしか実行できませんでした。

DLLをフォルダ「c:\ Windows\System32」に配置します

helloWorldDLL lib =(helloWorldDLL)Native.loadLibrary( "helloworldDLL"、helloWorldDLL.class);

エラーjava.lang.UnsatisfiedLinkError:Unable to load library "が続く場合は、DependencyWalkerを使用して依存DLLを表示します。

依存関係ウォーカー

于 2014-09-25T20:49:48.010 に答える
1

dllファイルが壊れていない場合、この問題の3つの考えられる理由:

  1. 32ビット64ビットの互換性。32ビットdllは、32ビットjdkまたはjreでのみ実行できます。Cygwinコマンドfile <filename>を使用することで、dllが32ビットか64ビットかを判断できます。

  2. dllが正しいパスに配置されていないため、Javaはそれを見つけることができません。System32一般的に言えば、パスが正しいことを確認する以外に、絶対的なパスを使用できます。

  3. ロードしているdllには、他のdllが必要です。

3番目の可能性をどのように処理できますか:

  1. JNIのSystem.loadLibrary()mthodを使用すると、JNAと比較してより多くのヒントを得ることができます。それは次のように言うかもしれません:Exception in thread "main" java.lang.UnsatisfiedLinkError: MyLibrary.dll: Can't find dependent libraries. それはいくつかのライブラリMyLibrary.dllが依存していることを意味します。依存関係ウォーカーを使用する ことで、必要なdllを特定できます。

  2. ロードしたいdllの前にこれらのdllをロードすることで、この問題を解決できます。

于 2018-12-04T01:18:48.973 に答える
0

同じ問題があり、何らかの理由でdllファイル名に大文字が含まれている場合でも、次のようにすべて小文字を使用してロードする必要があります。 Native.loadLibrary("dlls/library.dll", YourInterface.class)

これではありませんNative.loadLibrary("dlls/Library.dll", YourInterface.class)

于 2019-04-23T17:41:27.413 に答える