java.library.path,classpath Netbeans 8.0.2

时间:2016-02-12 00:06:15

标签: java matlab netbeans netbeans-8 matlab-compiler

我刚安装了Matlab Runtime:

Distributor ID: Ubuntu
Description:    Ubuntu 15.04
Release:    15.04
Codename:   vivid

您可以在已安装的R2015b(9.0)*中找到Matlab运行时here(对于R2015b,MATLAB Runtime 9.0,适用于MATLAB 8.6,也适用于R2015b)。

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:

我已将此行添加到Project>属性> VM选项:

-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:"

我已将相同的文件夹添加到Project>属性>库使用:添加JAR /文件夹按钮。

我已将以下代码行放入我的程序中:

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社区版,根本没有mods,代码运行没有任何问题。我真的希望与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

3 个答案:

答案 0 :(得分:1)

java.library.path是java用于查找本机库的路径。如果

,将导致错误
  • 路径中没有名为 libmwmclmcrrt.so 的文件
  • libmwmclmcrrt.so 文件的权限不正确

所以我的建议是运行名为libmwmclmcrrt.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

如果已存在于该路径中,您可以查看文件权限..

在大多数情况下,错误是由于找不到库而引起的。

答案 1 :(得分:0)

在netbeans中设置java.library.path。选择项目,右键单击Properties。选择Run选项,更改VM options以添加本机库-Djava.library.path="absolute\path\to\your\library\files"

RFC6749 3.3. Access Token Scope

之后,你需要通过`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

答案 2 :(得分:0)

我认为我们有更好的解释here

简而言之:

  • 某些系统属性仅在JVM启动时读取一次,因此在启动后更改它不会使JVM再次加载它,因此System.setProperty()将无效。
  • 特别是,java.library.path是只读的。

因此,设置它的唯一方法是在Windows中设置%PATH%,在类Linux系统中设置$LD_LIBRARY_PATH

要在Linux中设置系统范围,请编辑/etc/environment。如果您只想在用户范围内进行设置,请检查this very practical article

LD_LIBRARY_PATH="/some/preset/path:/your/path/to/add"

另外:如果您不了解,locate libmwmclmcrrt.so.9.0在这种情况下总是非常有用,特别是当您在不同位置使用相同名称的不同版本的文件时。 /your/path/to/add是一个目录。