0

Java コード内のdll フォルダーファイルに配置された dll の読み込みに問題があります。簡単にするために、exampleTest.java内で load dll を実行しようとしましたが、UnsatisiefLinkExceptionが発生しました。

プロジェクトの構造

私は試した:

InputStream in = this.getClass().getClassLoader().getResourceAsStream("../dll/file.dll");

しかし、うまくいきません。この問題を解決する方法を知っている人はいますか?

4

5 に答える 5

0

dllランタイムクラスパスに追加し、コードを次のように変更します

InputStream in = this.getClass().getClassLoader().getResourceAsStream("/dll/file.dll");
于 2012-08-13T09:56:48.683 に答える
0

getResourceAsStream()ソースフォルダを「ファイルシステム」のルートと見なします。私の知る限りgetResourceAsStream()、このフォルダがフォルダの外にある場合、経由でフォルダにアクセスすることはできませんsrc

そのdllファイルにアクセスする場合は、dllフォルダーをsrcフォルダーに移動します。そして、経由でそれにアクセスします

getResourceAsStream("/dll/file.dll")

この投稿を確認してください。別の質問ですが、要点は同じだと思います。

于 2012-08-13T09:59:13.980 に答える
0

リソースとしてロードする場合は、dllフォルダをソースフォルダにする必要があります。フォルダを右クリック->ビルドパス->ソースフォルダとして使用

次に、次のようにロードするだけです。

InputStream in = this.getClass().getClassLoader().getResourceAsStream("dll/file.dll");
于 2012-08-13T10:01:07.790 に答える
0

このようなことを試してみてください。

dll を含める必要はありませんが、パスで十分です。

System.setProperty("java.library.path", "/dll" + File.pathSeparator +
System.getProperty("java.library.path"));

コードを実行する前に、上記の行を追加します。これにより、dll パスが jvm ランタイム ライブラリに追加されます。

また、アプリケーションを実行しているフォルダーにも依存します。dll フォルダーの相対パスを指定する必要があります。または、完全修飾パスを指定することもできますが、プロジェクト構成の観点からはお勧めできません。

于 2012-08-13T10:05:33.693 に答える
0

インポートしたいだけの場合は、次のように System loadLibrary と nio.Paths をいつでも使用できます。

System.loadLibrary(Paths.get("/dll/file.dll").toString());

これは実質的に次のラッパーです。

Runtime.getRuntime().loadLibrary(Paths.get("/dll/file.dll").toString())
于 2012-08-13T10:07:22.480 に答える