我正在使用NVIDIA的可视化分析器(Nvvp)来分析Pascal GPU上的内核(就像那些aren't supported by Nsight Compute一样)--在Devuan GNU/Linux4系统上使用CUDA 11.4。
当我运行nvvp
时,它立即崩溃,并说:
$ nvvp
java.lang.ExceptionInInitializerError
at org.eclipse.osgi.storage.Storage.<init>(Storage.java:97)
at org.eclipse.osgi.storage.Storage.createStorage(Storage.java:84)
at org.eclipse.osgi.internal.framework.EquinoxContainer.<init>(EquinoxContainer.java:75)
at org.eclipse.osgi.launch.Equinox.<init>(Equinox.java:31)
at org.eclipse.core.runtime.adaptor.EclipseStarter.startup(EclipseStarter.java:295)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:231)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:78)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
at org.eclipse.equinox.launcher.Main.main(Main.java:1438)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected void java.net.URLClassLoader.addURL(java.net.URL) accessible: module java.base does not "opens java.net" to unnamed module @21bcffb5
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:357)
at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199)
at java.base/java.lang.reflect.Method.setAccessible(Method.java:193)
at org.eclipse.osgi.storage.FrameworkExtensionInstaller.findMethod(FrameworkExtensionInstaller.java:52)
at org.eclipse.osgi.storage.FrameworkExtensionInstaller.findMethod(FrameworkExtensionInstaller.java:59)
at org.eclipse.osgi.storage.FrameworkExtensionInstaller.findAddURLMethod(FrameworkExtensionInstaller.java:43)
at org.eclipse.osgi.storage.FrameworkExtensionInstaller.<clinit>(FrameworkExtensionInstaller.java:37)
... 14 more
为什么会发生这种情况,以及我如何规避/修复此错误?
**编辑:**在我的系统中,默认的Java VM是:OpenJDK 17-EA 2021-09-14。如果我使用其他已安装的虚拟机,例如/usr/lib/jvm/java-11-openjdk-amd64/bin/java
,我会收到相同的错误。来自https://jdk.java.net/archive/ for Java 16的JDK也不会改变事情。添加有人向我建议的--illegal-access=permit
也无济于事。
1条答案
按热度按时间xxslljrj1#
InaccessibleObjectException
似乎是由于使用Java 17运行尚未为Java 17做好准备的Java代码造成的。Java 17比以前的Java版本更具限制性,在这一点上破坏了向后兼容性。此外,Java 16比以前的版本更严格,在Java 11系统库中,缺少了Java 8中存在的包。与Java 17不同,使用Java 16或11来运行基于最新的Eclipse版本(
.ini
文件中包含--add-modules=ALL-SYSTEM
)的应用程序,并使用Java 8来运行基于较旧的Eclipse版本的应用程序。在可执行文件(同名)旁边的
.ini
文件中,您可以指定用于运行基于Eclipse的应用程序的Java。或者,您可以将Java放在安装目录的jre
子目录中。此外,您可以要求应用程序的供应商将应用程序附带嵌入式Java。
更新:Robert Crovella参考文档,文档中提到可视Profiler需要使用JAVA 8。