Java.library.path, classpath Netbeans 8.0.2

Я только что установил Matlab Runtime на:

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

Вы можете найти Matlab runtime здесь в моем случае в установленном R2015b (9.0) * (MATLAB Runtime 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:

Я добавил эту строку в Project > Properties > VM Options:

-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 > Properties > Libraries, используя кнопку: Добавить JAR/Folder.

Я поместил следующую строку кода в свою программу:

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 Community и без модов вообще, и код просто запускается без каких-либо проблем. Я действительно хочу поддерживать 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

Ответ 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

Если уже присутствует в этом пути, возможно, вы можете проверить права доступа к файлам.

В большинстве случаев ошибка возникает из-за того, что библиотека не найдена.

Ответ 2

установить java.library.path в netbeans. Выберите проект, щелкните правой кнопкой мыши по Properties. Выберите опцию Run, измените VM options, чтобы добавить собственную библиотеку -Djava.library.path="absolute\path\to\your\library\files".

java.library.path option

после этого вам нужно загрузить библиотеку через `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

Я думаю, что у нас есть лучшее объяснение здесь.

Короче:

  • Некоторое системное свойство считывается только один раз при запуске JVM, тем самым меняя его после запуска, JVM не будет загружать его снова, поэтому System.setProperty() не будет работать.
  • В частности, java.library.path доступен только для чтения.

Таким образом, единственный способ установить его - установить %PATH% в Windows или $LD_LIBRARY_PATH в Linux-подобных системах.

Чтобы установить его в системе в Linux, отредактируйте /etc/environment. Если вы хотите установить его только по всей стране, отметьте эту очень практичную статью.

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

Плюс: в случае, если вы этого не знаете, locate libmwmclmcrrt.so.9.0 всегда очень полезен в этой ситуации, особенно если у вас может быть различная версия файла в другом месте с идентичным именем. А /your/path/to/add - это каталог.