java.library.path,classpath Netbeans 8.0.2
我刚刚将Matlab运行时安装在:java.library.path,classpath Netbeans 8.0.2,java,matlab,netbeans,netbeans-8,matlab-compiler,Java,Matlab,Netbeans,Netbeans 8,Matlab Compiler,我刚刚将Matlab运行时安装在: Distributor ID: Ubuntu Description: Ubuntu 15.04 Release: 15.04 Codename: vivid 在我的例子中,您可以在已安装的R2015b(9.0)*(针对R2015b的Matlab运行时9.0旨在与Matlab 8.6(也就是R2015b)配合使用)中找到Matlab运行时 Matlab库安装到:/usr/local/Matlab 我正在使用Netbeans 8.0.2 jav
Distributor ID: Ubuntu
Description: Ubuntu 15.04
Release: 15.04
Codename: vivid
在我的例子中,您可以在已安装的R2015b(9.0)*(针对R2015b的Matlab运行时9.0旨在与Matlab 8.6(也就是R2015b)配合使用)中找到Matlab运行时
Matlab库安装到:/usr/local/Matlab
我正在使用Netbeans 8.0.2
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
我从程序中得到的错误如下:
Exception in thread "main" java.lang.UnsatisfiedLinkError: Failed to find the required library libmwmclmcrrt.so.9.0 on java.library.path.
This library is typically installed along with MATLAB or the MCR. Its absence may indicate an issue with that installation or the current path configuration.
The MCR version that this component is trying to use is: 9.0.
在Matlab的安装中,它确实说:
On the target computer, append the following to your LD_LIBRARY_PATH environment variable: /usr/local/MATLAB/MATLAB_Runtime/v90/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/sys/os/glnxa64:
我已将此行添加到项目>属性>虚拟机选项:
-Djava.library.path="/usr/local/MATLAB/MATLAB_Runtime/v90/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/sys/os/glnxa64:"
我使用:addjar/Folder按钮将相同的文件夹添加到Project>Properties>Libraries
我已在程序中输入以下代码行:
System.out.println(System.getProperty("java.library.path"));
我正确地将其输出为:
/usr/local/MATLAB/MATLAB_Runtime/v90/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/sys/os/glnxa64:
但是,它仍然无法运行,并出现相同的错误
我安装了IntelliJ IDEA社区版,没有任何MOD,代码运行时没有任何问题。我真的希望继续使用Netbeans,并希望了解这个问题。有什么想法吗
IntelliJ已加载以下内容:
/usr/lib/jvm/java-1.8.0-openjdk-amd64/bin/java
-Didea.launcher.port=7532
-Didea.launcher.bin.path=/home/code/idea-IC-143.1821.5/bin
-Dfile.encoding=UTF-8
-classpath /usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/charsets.jar:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/cldrdata.jar
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/dnsns.jar
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/icedtea-sound.jar
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/java-atk-wrapper.jar
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/localedata.jar
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/nashorn.jar
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunec.jar
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunjce_provider.jar
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/sunpkcs11.jar
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/ext/zipfs.jar
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/jce.jar
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/jsse.jar
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/management-agent.jar
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/resources.jar
:/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/rt.jar
:/home/code/NetBeansProjects/CO2model/out/production/TestModelABC
:/home/code/NetBeansProjects/CO2model/TestModelABC/dist/lib/co2model.jar
:/home/code/NetBeansProjects/CO2model/TestModelABC/dist/lib/javabuilder.jar
:/home/code/NetBeansProjects/CO2model/for_redistribution_files_only/co2model.jar
:/home/code/idea-IC-143.1821.5/lib/idea_rt.jar com.intellij.rt.execution.application.AppMain test.Startup
.
:
:/usr/local/MATLAB/MATLAB_Runtime/v90/runtime/glnxa64
:/usr/local/MATLAB/MATLAB_Runtime/v90/bin/glnxa64
:/usr/local/MATLAB/MATLAB_Runtime/v90/sys/os/glnxa64
:
:/usr/java/packages/lib/amd64:/usr/lib/x86_64-linux-gnu/jni
:/lib/x86_64-linux-gnu
:/usr/lib/x86_64-linux-gnu
:/usr/lib/jni
:/lib
:/usr/lib
java.library.path
是java用来查找本机库的路径。。如果
- 路径中没有名为libmwmclmcrt.so的文件
- 文件的权限libmwmclmcrt.so不正确
/usr/local/MATLAB/MATLAB_Runtime/v90/runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/sys/os/glnxa64
如果该路径中已经存在,您可以检查文件权限
在大多数情况下,由于找不到库而导致错误。在netbeans中设置java.library.path。选择项目,右键单击属性。选择
Run
选项,更改VM选项
以添加本机库-Djava.library.path=“absolute\path\to\your\library\files”
在此之后,您需要通过“System.load”(“absolute\path\to\your\library\files”);”加载库在静态块中
像这样
static {
try {
System.load("absolute\path\to\your\library\files");
} catch (UnsatisfiedLinkError e) {
System.err.println("Native code library failed to load.\n" + e);
System.exit(1);
}
}
还要修改LD_LIBRARY_PATH环境变量,以包括matlab库所在的路径
export LD_LIBRARY_PATH=/path/to/your/library:$LD_LIBRARY_PATH
我想我们有更好的解释 简言之:
- 某些系统属性在JVM启动时只读取一次,因此在启动后更改它不会使JVM再次加载它,因此
将无法工作system.setProperty()
- 特别是,
是只读的java.library.path
%PATH%
,或者在类似Linux的系统中设置$LD\u LIBRARY\u PATH
要在Linux系统范围内设置它,请编辑/etc/environment
。如果只想将其设置为用户范围,请选中
另外:如果您不知道,那么在这种情况下,
定位libmwmclmcrt.so.9.0
总是非常有用的,特别是当您可能在不同的位置有不同版本的文件且名称相同时。而/your/path/to/add
是一个目录 猜测。。。也许您的Netbeans没有LD\u LIBRARY\u PATH
env变量?尝试关闭netbeans,然后运行导出LD_库路径=/usr/local/MATLAB/MATLAB_Runtime/v90/Runtime/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/bin/glnxa64:/usr/local/MATLAB/MATLAB_Runtime/v90/sys/os/glnxa64:;netbeans&重新启动它。我认为设置java.library.path
是不够的,它在加载即时本机库时工作,但在这些库引用自己的其他本机库时失败。您还应该设置用于查找共享库的操作系统特定变量(Windows上的PATH
,Linux上的LD\u LIBRARY\u PATH
,Mac上的DYLD\u LIBRARY\u PATH
)。还有一点需要注意的是,文档建议使用与MATLAB相同的Java版本(1.7而不是1.8),包括运行时和JDK。您可以在MATLAB中运行命令version-java
进行检查。我们也使用MCR,但在Windows系统上使用。默认情况下,系统属性java.library.path
映射到path
环境变量。在Linux系统上,我猜是LD\u LIBRARY\u PATH
。此path变量应包含指向运行时库的directoy。在Windows上,这是\runtime\win64
。类路径不需要有此目录。它只需要有适当的JAR文件(我们使用javabuilder.JAR
)。
LD_LIBRARY_PATH="/some/preset/path:/your/path/to/add"