Как запустить линейную алгебру JBLAS Java без собственных библиотек
Я хотел бы запустить JBLAS в приложении Kotlin. Я использую OpenJDK 17 на Mac OSX Monterey с M1.
Я добавил зависимость JBLAS в свой Maven pom.xml.
Я написал тест JUnit, в котором один тест проходит успешно, а другой терпит неудачу:
package fea
import org.jblas.DoubleMatrix
import org.jblas.Solve
import org.junit.jupiter.api.Assertions
import org.junit.jupiter.api.Test
class JBlasTest {
@Test
fun `create and add two double matricies`() {
// setup
val n = 3
val a = DoubleMatrix(n, n, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0)
val b = DoubleMatrix.ones(n, n).mul(2.0)
val expected = DoubleMatrix(n, n, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0)
// exercise
val actual = a.add(b)
// assert
Assertions.assertEquals(expected, actual)
}
@Test
fun `first solver`() {
// setup
val n = 3
val a = DoubleMatrix(n, n, 1.0, 1.0, 2.0, 2.0, 4.0, -3.0, 3.0, 6.0, -5.0)
val b = DoubleMatrix(n, 1, 9.0, 1.0, 0.0)
val expected = DoubleMatrix(n, 1, 1.0, 2.0, 3.0)
// exercise
val actual = Solve.solve(a, b)
// assert
Assertions.assertEquals(expected, actual)
}
}
Тест, который создает и добавляет две двойные матрицы, проходит.
Тест, который нужно решитьA*x = b
терпит неудачу сUnsatisfiedLinkError
.
Я добавил библиотеки lapack и openblas на свой Mac с помощью brew:
brew install lapack openblas
Я добавил пути к моей LD_LIBRARY_PATH:
LD_LIBRARY_PATH=/opt/homebrew/opt/lapack:/opt/homebrew/opt/openblas
Нет радости. Тест, который создает и добавляет два прохода двойных матриц; первый тест решателя не проходит. Вот сообщение об ошибке, которое я получаю:
java.lang.UnsatisfiedLinkError: 'int org.jblas.NativeBlas.dgesv(int, int, double[], int, int, int[], int, double[], int, int)'
Я не знаю, какая библиотека содержит файлы . Я предполагал, что все необходимые зависимости будут доступны в библиотеках Open BLAS и LAPACK, которые я установил вместе с brew.
Я искал в репозитории jblas GitHub функцию с именемdgesv
. IntelliJ не смог найти метод с таким именем.
Возможно, мой LD_LIBRARY_PATH неверен.
Я попытался клонировать репо и запуститьmvn install
. У меня были сбои тестов, которые также были связаны с отсутствующими зависимостями. Когда я выполняю grep текстового вывода surefire-reports для ERROR, я вижу много ошибок ссылок.
Я установил XCode из AppStore - не помогло.
Далее я собираюсь попробовать собрать исходный код GitHub. Я не уверен, нужно ли мне вносить изменения в Makefile, чтобы использовать M1.
Это вызвано отсутствием библиотек в Mac M1?
Любые советы по следующим шагам?