Я знаю, что мне нужно хранить свои библиотеки в папках 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, но только одна из этих работ?
system32
странная. Он используется только для 64-битных DLL, а 32-битные программы будут загружаться изsyswow64
, независимо от того, что говоритPATH
. Моя рекомендация: никогда не помещайте пользовательские / сторонние библиотеки DLL вsystem32
. Оставьте эту папку для системных DLL. - person Andreas   schedule 18.09.2016