Как загрузить DLL из подкаталога lib из файла JAR? - PullRequest
0 голосов
/ 28 октября 2018

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

enter image description here

К сожалению,

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-файлов?

1 Ответ

0 голосов
/ 29 октября 2018

каталог 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, они не могут быть найдены там, где ожидается; что излишне усложняет вещи.

...