【问题标题】:java.library.path, classpath Netbeans 8.0.2java.library.path,类路径 Netbeans 8.0.2
【发布时间】:2016-05-23 00:11:15
【问题描述】:

我刚刚安装了 Matlab 运行时:

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

在我的例子中,您可以在安装的 R2015b (9.0)* 中找到 Matlab 运行时 here(MATLAB 运行时 9.0,对于 R2015b,旨在与 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:

我已将此行添加到项目 > 属性 > 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:"

我已经使用添加 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 社区版,根本没有任何模块,代码运行没有任何问题。我真的很想继续使用 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

【问题讨论】:

  • 猜测...也许您的 Netbeans 没有 LD_LIBRARY_PATH 环境变量?尝试关闭 netbeans,然后运行export LD_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: ; netbeans & 重新启动它。
  • 我认为设置java.library.path 是不够的,它在加载直接本机库时有效,但当这些库引用它们自己的其他本机库时会失败。您还应该设置特定于操作系统的变量以查找共享库(Windows 上为PATH,Linux 上为LD_LIBRARY_PATH,Mac 上为DYLD_LIBRARY_PATH)。
  • 还有一点需要注意,文档建议使用与 MATLAB 相同的 Java 版本(1.7 而不是 1.8),包括运行时和 JDK。您可以通过在 MATLAB 中运行命令 version -java 来检查。
  • 我们也使用 MCR,但在 Windows 系统上。默认情况下,系统属性java.library.path 映射到PATH 环境变量。在 Linux 系统上,我猜是LD_LIBRARY_PATH。此路径变量应包含运行时库的目录。在 Windows 上,这是<mcr-dir>\runtime\win64。类路径不需要有这个目录。它只需要有相应的 JAR 文件(我们使用javabuilder.jar)。

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


【解决方案1】:

java.library.path是java用来查找native库的路径。如果

  • 路径中没有名为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

如果该路径中已经存在,也许您可​​以检查文件权限..

在大多数情况下,由于找不到库而导致错误..

【讨论】:

    【解决方案2】:

    在 netbeans 中设置 java.library.path。选择项目,右击Properties。选择Run选项,更改VM options添加原生库-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
    

    【讨论】:

      【解决方案3】:

      我认为我们有更好的解释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 是一个目录。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-11-03
        • 2012-02-27
        • 2012-10-21
        • 1970-01-01
        • 2015-08-22
        • 2017-07-13
        • 1970-01-01
        相关资源
        最近更新 更多