Как Java находит собственные библиотеки?

Я знаю, что мне нужно хранить свои библиотеки в папках java.library.path. Я поместил свою dll в папку c: \ windows \ system32 (я использую 32-битную jre) и попробовал этот код:

public static void main(String[] args) {
    System.out.println(System.getProperty("java.library.path"));
    System.loadLibrary("ZebraNativeUsbAdapter_32");
}

И я получил такой вывод:

C: \ Program Files (x86) \ Java \ jre1.8.0_73 \ bin; C: \ Windows \ Sun \ Java \ bin; C: \ Windows \ system32; C: \ Windows; C: \ ProgramData \ Oracle \ Java \ javapath; C: \ Windows \ system32; C: \ Windows; C: \ Windows \ System32 \ Wbem; C: \ Windows \ System32 \ WindowsPowerShell \ v1.0 \; C: \ Program Files (x86) \ NVIDIA Corporation \ PhysX \ Common; D: \ Programmi \ Skype \ Phone \; C: \ Program Files \ SourceGear \ Common \ DiffMerge \; C: \ Program Files \ MariaDB 10.1 \ bin ;.

И эта ошибка:

Исключение в потоке "main" java.lang.UnsatisfiedLinkError: нет ZebraNativeUsbAdapter_32 в java.library.path

Затем я попытался поместить файл dll в C: \ Program Files (x86) \ Java \ jre1.8.0_73 \ bin, и он работает! Но почему обе папки были указаны в java.library.path, но только одна из этих работ?


person Tobia    schedule 18.09.2016    source источник
comment
На конкурс наихудшей шутки: Java считает нативные библиотеки восхитительными. :)   -  person Costi Ciudatu    schedule 18.09.2016
comment
Как видно из файла dup. ссылка, папка system32 странная. Он используется только для 64-битных DLL, а 32-битные программы будут загружаться из syswow64, независимо от того, что говорит PATH. Моя рекомендация: никогда не помещайте пользовательские / сторонние библиотеки DLL в system32. Оставьте эту папку для системных DLL.   -  person Andreas    schedule 18.09.2016