libhsdis0-fcml
按照其他答案1中所述首先安装:
sudo apt-get install libhsdis0-fcml
这只会为OpenJDK安装它。但是,您正在使用java-8-oracle
,因此您需要将其复制到那里。这是对我有用的确切复制命令:
sudo cp /usr/lib/jvm/java-8-openjdk-amd64/jre/lib/amd64/hsdis-amd64.so /usr/lib/jvm/java-8-oracle/jre/lib/amd64/hsdis-amd64.so
如果仍然无法使用,则可以尝试通过strace
来查看您java
的外观。我用了:
strace -f java -XX:CompileCommand='print, *.*' ... |& grep hsdis
得到这样的输出:
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libhsdis-amd64.so", O_RDONLY <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libhsdis-amd64.so", O_RDONLY|O_CLOEXEC <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/libhsdis-amd64.so", O_RDONLY|O_NONBLOCK <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/hsdis-amd64.so", O_RDONLY <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/hsdis-amd64.so", O_RDONLY|O_CLOEXEC <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/hsdis-amd64.so", O_RDONLY|O_NONBLOCK <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/hsdis-amd64.so", O_RDONLY <unfinished ...>
[pid 10783] open("/usr/lib/jvm/java-8-oracle/jre/lib/amd64/hsdis-amd64.so", O_RDONLY|O_CLOEXEC) = 14
您可以看到您尝试使用的位置和名称肯定是在JDK搜索中的(在我的情况下,它可能会搜索更多位置,但是由于上面的最后一个位置是它找到共享对象的位置而停止了)。
请注意,由于实际的JVM是作为原始命令的子进程启动的,因此您肯定需要该-f
标志。strace
java
其中strace
可能揭示的是权限问题。对于用户启动,我只需要在库中阅读权限java
。
我的java -version
输出:
java version "1.8.0_151"
Java(TM) SE Runtime Environment (build 1.8.0_151-b12)
Java HotSpot(TM) 64-Bit Server VM (build 25.151-b12, mixed mode)
1确实,这只是以hsdis.so
软件包管理器友好的方式获取(可能正在工作的)文件的一种方法。您也总是可以直接从各种来源之一直接下载它。