zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Ubuntu系统中CUDA套件nvvp启动后报错Unable to make protected void java.net.URLClassLoader.addURL(java.net.URL) accessible: module java.base does not "opens java.net" to unnamed module @380fb434

JAVANetUbuntu系统 报错 to 启动 not
2023-09-11 14:19:19 时间

最近在看cuda方面的内容,需要对cuda代码做一些性能分析,于是需要使用nvvp,但是启动nvvp后报错: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 @380fb434

 

 

详细报错信息:

(base) devil@hp:/tmp$ 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.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    at java.base/java.lang.reflect.Method.invoke(Method.java:577)
    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 @380fb434
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
    at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:200)
    at java.base/java.lang.reflect.Method.setAccessible(Method.java:194)
    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)
    ... 12 more

 

 

 

 

 

经过在网上Google后找到问题点在于java的jre环境过高,外网上的解决方法一般是将jre环境降到版本8,于是这里的查看本机java版本:

java --version

 

 

 

 

 

卸载系统中默认的java环境:

sudo apt remove java-common

 

 

 

 

 

重点提醒:

需要注意的是这里卸载的是系统环境下的java,因为本机并没有任何依赖系统路径下java环境的应用,因此就直接对系统路径下的java环境进行卸载和重安装,但是如果你的系统中有一些对系统路径下java环境依赖较强的开发任务就不要采取该方式,比如在开发中的java web任务,hadoop任务,Android任务等等。因为cuda套件nvvp对gcc和java的路径读取并不是优先读取系统路径下的,而是优先读取自身路径下的,比如本机cuda的安装路径为/usr/local/cuda-11.3,那么nvvp的安装路径为/usr/local/cuda-11.3/libnvvp,因此nvvp优先读取自身路径下的java路径为/usr/local/cuda-11.3/libnvvp/jre/bin/java,也就是说你可以在系统中手动安装java8的jre到用户空间下,然后在为路径/usr/local/cuda-11.3/libnvvp/jre/bin/java设置软链接到用户空间下的java,这里就不做这方面的演示了。

 

 

 

 

本机解决方法为:

在系统路径下安装java8:

sudo apt install openjdk-8-jre-headless

 

 

 

 

 

 

 

 

 

 

==================================================

 

 

参考:

https://askubuntu.com/questions/871462/java-eclipse-issue-unable-to-make-protected-void-java-net-urlclassloader-addu

https://github.com/lucko/helper/issues/98