java .lang.UnsatisfiedLinkError: нет mkl_rt в java .library.path - PullRequest
0 голосов
/ 18 марта 2020

У меня есть приложение java8 в windows10, которое использует библиотеку улыбок. Например, когда я запускаю алгоритм LLE, я получаю это предупреждение:

модуль smile-netlib недоступен в classpath. Будет использоваться чистая матричная библиотека Java. Поэтому я решил добавить, как предполагает smile в github, smile-ntelib через maven. Но после повторного запуска я получаю следующую трассировку стека:

java.lang.UnsatisfiedLinkError: no mkl_rt in java.library.path
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at smile.netlib.NLMatrix.<clinit>(NLMatrix.java:41)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at smile.math.matrix.Factory.<clinit>(Factory.java:39)
    at smile.math.matrix.Matrix.zeros(Matrix.java:98)
    at smile.manifold.LLE.<init>(LLE.java:155)
    at TestLLE.TestLLETetCase(TestLLE.java:44)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)

1) что такое mkl_rt и как я могу вставить его в java? Это значит математическая библиотека ядра? 2) Также smile предлагает «сделать их оптимизированные для машин libblas3 (CBLAS) и liblapack3 (Fortran) доступными в качестве разделяемых библиотек во время выполнения». Как я могу это сделать?

Редактировать:

Я нашел и скачал mkl_rt.dll и поместил его в папку с именем dlls. Моя текущая проблема заключается в том, что, установив в java .library.path папку с mkl_rt, он находит dll, но не находит функции из других зависимостей. Я нашел этот код в smile-netlib, с которой начинается проблема.

enter image description here

JMatrix (в синем) - это класс из jar улыбки-математики в Пакет smile.math.matrix, поэтому, когда я добавляю в путь через аргументы vm, программно или через eclipse в исходном месте, класс dll smile-netlib NLMatrix не находит класс JMatrix, представляющий собой smile-netlib, и я получаю следующую ошибку.

java.lang.NoSuchMethodError: smile.math.matrix.Matrix.of([D)Lsmile/math/matrix/DenseMatrix;
at smile.netlib.LU.solve(LU.java:99)
at smile.manifold.LLE.<init>(LLE.java:180)
at TestLLE.TestLLETetCase(TestLLE.java:45)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:541)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:763)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:463)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:209)

1 Ответ

0 голосов
/ 18 марта 2020

Вы должны найти папку, содержащую mkl_rt.dll, а затем добавить эту папку в системное свойство java.library.path. Обычно это делается путем передачи опции -Djava.library.path=/path/to/folder в JVM при запуске.

mkl_rt.dll содержит эффективную реализацию алгоритмов в собственном (не Java) коде.

...