8

Java アプリケーションでJacob jar ファイルを使用しています。

この Jacob jar ファイルには .dll ファイルが付属しています。クラスパスに Jacob jar ファイルを追加しました。しかし、アプリケーションを実行すると、実行時エラーが発生します

"couldn't load jacob-1.15-M3-x86.dll file"

この .dll ファイルを読み込むにはどうすればよいですか?

編集:================================================ =================================

「パス」環境変数を.dllファイルを含むディレクトリに設定し、次のように.dllファイルをロードしました

static {
    System.loadLibrary("jacob-1.15-M3-x86.dll");
}

しかし、次のエラーが発生しました

    java.lang.UnsatisfiedLinkError: no jacob-1.15-M3-x86.dll in java.library.path
    at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734)
    at java.lang.Runtime.loadLibrary0(Runtime.java:823)
    at java.lang.System.loadLibrary(System.java:1028)
    at TemplateClass.TemplateClass.<clinit>(TemplateClass.java:14)
4

6 に答える 6

10

「jacob-1.15-M3-x86.dll」は、オペレーティング システムが検出できる場所にある必要があります。ここにはいくつかのオプションがあります。

  • アプリケーションを起動したディレクトリに .dll ファイルを配置できます。アプリケーションを開始するためのバッチ スクリプトがある場合、それはそのディレクトリになります。ある種のアプリケーション サーバーで開始する場合、通常は「bin」ディレクトリになります。

  • %PATH% 環境変数のどこかに .dll ファイルを配置できます。PATH 環境変数を更新して、.dll ファイルを含むディレクトリを含める方が簡単な場合があります。

  • もう 1 つのオプションは、.dll を %SystemRoot%\system32 ディレクトリに配置することです。通常、これは「C:\Windows\system32」です。このオプションは、MSCVRT ランタイムのような共有ライブラリでない限り、通常はお勧めしません。

他に考えられる問題が 1 つあります。.dll が 32 ビットとしてコンパイルされている場合は、32 ビット Java ランタイムで実行する必要があります。同様に、64 ビット .dll の場合は、64 ビット JRE で実行する必要があります。

于 2010-01-17T18:20:36.520 に答える
5

ああ、それはコンパイル エラーではなく、実行時エラーです。

私の推測では、あなたの DLL はPATH. ではありませんCLASSPATHPATH、それは Windows が DLL を探す場所だからです。DLL の場所を含めるように PATH を拡張するか、他の多くの人が行うことを試してください\Winnt\System\System32。つまり、他のすべての DLL がどこにあっても。

アップデート

ありがたいことに、あなたが投稿したエラーメッセージは正確な問題を指摘しています。DLL を含むディレクトリをjava.library.pathThis Sun フォーラム スレッドに配置することで解決できます: http://forums.sun.com/thread.jspa?threadID=627890

実際、それは本来あるべきよりもはるかにクリーンではありません。これは、Java の「陰気な」領域の 1 つと思われます。スレッドはあちこちに散らばっています。問題と解決策を確認するために最後まで読むことをお勧めします。少し試行錯誤すれば成功できると思います。

于 2010-01-17T18:12:24.993 に答える
3

その他のオプション :

  • プロパティ java.library.path を dll を含むディレクトリに設定します。例 : java -Djava.library.path="path/to/directory/containing/the/dll" -jar appli.jar
  • コードで、System.load を使用して dll を明示的にロードします。
于 2010-01-17T19:43:12.287 に答える
1

LD_LIBRARY_PATH を設定する必要があります。 これにより、従うべきすべての正しい手順が得られます。

于 2010-01-17T18:23:01.537 に答える
0

私も同じ問題を抱えていました。

質問に「回答」されていないことがわかったので、上記のオプションのどれも機能しなかった可能性があります。

私の最後の仮説の 1 つは、Jacob.dll に依存関係がないというものでした。

私がしたことは、依存を取得して、ジェイコブが使用するすべての依存がロードされているかどうかを確認することでした。もちろん、これは Windows でも機能します。

乾杯!

于 2011-08-23T13:09:36.487 に答える