0

いくつかの調査を行った後、プロジェクトのRun Configurationに次のVM Argumentを追加できると言う人もいます。実行時に、JVM はこれらのディレクトリを検索して DDL を見つけます。

-Djava.library.path="${workspace_loc}/GunCalibration/myLib/DLLs;${env_var:PATH}"

GunCalibrationは、ワークスペース内の Java プロジェクト フォルダーです。 DLLsフォルダーには、私の JNI 仕様で定義されているすべての DLL が含まれています。

その結果、次のエラーが発生します。

スレッド「メイン」の例外 java.lang.UnsatisfiedLinkError: D:\Software x64\eclipse3.7\Kai\workspace_RealW\GunCalibration\myLib\DLLs\sixense.dll: 依存ライブラリが見つかりません

ただし、特定の dll ファイルをJAVA_HOME\jre6\binにコピーすると、コードは正しく機能します。(このパスをシステム環境の PATH に追加します。)

java.library.path を使用した最初のアプローチが機能しない理由を誰か説明できますか? JAVA_HOME\jre6\binに配置する必要がある ddl を確認するにはどうすればよいですか?

どうもありがとう〜

4

1 に答える 1

1

JAVA_HOME \ jre6 \ binは事実上システムPATHにあり(実行中のjava.exeプログラムと同じディレクトリであるため)、そこにあるすべてのDLLをシステムがロードできるようにします。java.library.pathは、ほとんどがPATHの値から派生しますが、VMがネイティブライブラリを探す場所にのみ影響し、システム自体には影響しません。

VMは、java.library.path内のパスに基づいて任意のファイルを明示的にロードできますが、システムが依存DLLを検索する方法に影響を与えることはできません(検索に最初のDLLへのパスを含めるようにシステムに指示する場合を除く-を参照してください)。LoadLibrary [Ex]のMSDN

DLLをコピーする代わりの方法の1つは、DLLへのパスをPATH環境変数に追加することです。

于 2012-05-31T14:05:35.117 に答える