6

を使用すると、 LinuxJava Attach APIでのみ次のリンクエラーが発生します(別のマシンで試してみました)。

Exception in thread "main" java.lang.UnsatisfiedLinkError: sun.tools.attach.WindowsAttachProvider.tempPath()Ljava/lang/String;
        at sun.tools.attach.WindowsAttachProvider.tempPath(Native Method)
        at sun.tools.attach.WindowsAttachProvider.isTempPathSecure(WindowsAttachProvider.java:74)
        at sun.tools.attach.WindowsAttachProvider.listVirtualMachines(WindowsAttachProvider.java:58)
        at com.sun.tools.attach.VirtualMachine.list(VirtualMachine.java:134)
        at sun.tools.jconsole.LocalVirtualMachine.getAttachableVMs(LocalVirtualMachine.java:151)
        at sun.tools.jconsole.LocalVirtualMachine.getAllVirtualMachines(LocalVirtualMachine.java:110)
        ...

興味深いことに、SolarisとWindowsでは、そのままで動作します。

java.library.pathを含むディレクトリを指すように指定するいくつかの組み合わせを試しましたlibattach.soが、運がありませんでした。

ここで何が問題になっていますか?

そしておまけの質問として
どのネイティブライブラリが実際にJavaクラスにバインドされているかを確認する方法はありますか?

4

1 に答える 1

6

プラットフォームごとに異なる AttachProvider が使用されます。Linux では、sun.tools.attach.WindowsAttachProvider を使用しないでください。Windows用です。

[solaris] sun.tools.attach.SolarisAttachProvider
[windows] sun.tools.attach.WindowsAttachProvider
[linux]   sun.tools.attach.LinuxAttachProvider

これは、リソース ファイル META-INF\services\com.sun.tools.attach.spi.AttachProvider で構成されます (通常、このファイルは tools.jar にあります)。CLASSPATH を検索して、このリソース ファイルの最初のオカレンスを取得し、そこから AttachProvider 実装クラスを読み取ります。

そのため、CLASSPATH で sun.tools.attach.WindowsAttachProvider を検索することで、この問題を解決できる可能性があります。Windows から tools.jar が含まれている可能性があります。

于 2013-03-08T10:48:39.070 に答える