Как загрузить DLL из подкаталога `lib` файла JAR?

Я включил (с Gradle) несколько JAR с собственными библиотеками (DLL), которые упакованы в подкаталог lib над файлами DLL:

Как загрузить DLL из подкаталога `lib` файла JAR?

К несчастью,

System.loadLibrary('JCudaRuntime-0.9.2-windows-x86_64');

причины

java.lang.UnsatisfiedLinkError: no JCudaRuntime-0.9.2-windows-x86_64 in java.library.path

Как это исправить?

Можно ли указать подкаталог для loadLibrary? Где лучше разместить собственные библиотеки? Просто в корне файлов JAR?

Могу ли я научить Gradle искать аборигенов под lib внутри JAR?

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
0
297
1

Ответы 1

каталог libs обычный предназначен для библиотек jar и aar.

Сборка x86_64 пошла бы на src/main/jniLibs/x86_64

static {
    try {
        System.loadLibrary("JCudaDriver-0.9.2-windows-x86_64");
        System.loadLibrary("JCudaRuntime-0.9.2-windows-x86_64");
    } catch (UnsatisfiedLinkError e) {
        Log.e(LOG_TAG, e.getMessage());
    }
}

можно / можно также изменить путь:

sourceSets {
    main {
        jniLibs.srcDir "src/main/jniLibs"
        jni.srcDirs = "src/main/cpp"
    }
}

проблема в том, что подкаталог для конкретной платформы x86_64 все еще ожидается. извлечение .dll из .jar и размещение их в каталоге проекта jniLibs может быть самым простым - потому что, пока они находятся внутри jar с каталогом lib, они могут быть не найдены там, где ожидалось; что излишне усложняет ситуацию.

Другие вопросы по теме