我正在尝试使用-XX:+PrintAssembly
选项运行我的程序,但我总是收到如下消息:
Java HotSpot(TM) 64 位服务器 VM 警告:PrintAssembly 已启用;打开 DebugNonSafepoints 以获得额外输出无法加载 hsdis-amd64.so;库无法加载;PrintAssembly 被禁用
我下载了hsdis-amd64.so从Kenai:https://kenai.com/projects/base-hsdis/downloads
我自己用http://sourceforge.net/projects/fcml/files/fcml-1.1.1/项目构建了这个库。
我把它放在任何地方“谷歌说”:
/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/
/usr/lib/jvm/java-8-oracle/jre/lib/amd64/
/usr/lib/jvm/java-8-oracle/lib/amd64/
Run Code Online (Sandbox Code Playgroud)
名称:
hsdis-amd64.so
libhsdis-amd64.so
hsdis.so
libhsdis.so
Run Code Online (Sandbox Code Playgroud)
我什至尝试过设置手动导出 LD_LIBRARY_PATH=/usr/lib/jvm/java-8-oracle/jre/lib/amd64/server/
......一切都白费了。
没有更多的谷歌结果,不再有上述解决方案的组合:-(
任何人都可以帮助我吗?
Bee*_*ope 11
首先libhsdis0-fcml
按照其他答案1中的描述进行安装:
sudo apt-get install libhsdis0-fcml
Run Code Online (Sandbox Code Playgroud)
这只会为 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
Run Code Online (Sandbox Code Playgroud)
如果这仍然不起作用,您可以尝试strace
查看您java
正在寻找的位置。我用了:
strace -f java -XX:CompileCommand='print, *.*' ... |& grep hsdis
Run Code Online (Sandbox Code Playgroud)
得到这样的输出:
[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
Run Code Online (Sandbox Code Playgroud)
您可以看到您尝试的地点和名称肯定在 JDK 搜索中(在我的情况下,它可能会搜索更多的地方,但由于上面的最后一个位置是它找到共享对象的位置而停止)。
请注意,您肯定需要该-f
标志,strace
因为实际的 JVM 是作为原始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)
Run Code Online (Sandbox Code Playgroud)
1真的,这只是一种以hsdis.so
包管理器友好的方式获取(可能有效)文件的方法。您也可以直接从各种来源之一下载它。
安装包libhsdis0-fcml
:
apt-get install libhsdis0-fcml
Run Code Online (Sandbox Code Playgroud)
它应该提供所有必要的库(参见http://packages.ubuntu.com/xenial/amd64/libhsdis0-fcml/filelist)
归档时间: |
|
查看次数: |
8533 次 |
最近记录: |