Это не решение, а дополнительные данные, которые, я надеюсь, могут помочь найти их.
У меня та же проблема, что и у ОП.
Моя система Windows7 Ultimate x64 SP1
.
Я запускаю свой 32-битный test_x86.dll
, используя 32-битный jvm 1.6.0_29.
Я пытался поместить test_x86.dll
в следующие папки:
C:\
C:\Windows
C:\Program Files (x86)
и это работает: мой test_x86.dll
успешно загружен.
Но если я помещу свою DLL в
C:\Windows\System32
Я получаю исключение:
Exception in thread "main" java.lang.UnsatisfiedLinkError: no test_x86 in java.library.path
Я каждый раз меняю java.library.path
перед тем, как пытаться загрузить dll, поэтому он всегда начинается с соответствующей директории:
java.library.path = C:/;C:\Program Files (x86)\Java\jre6\bin; ...
java.library.path = C:/Windows;C:\Program Files (x86)\Java\jre6\bin; ...
java.library.path = C:/Program Files (x86);C:\Program Files (x86)\Java\jre6\bin; ...
java.library.path = C:/Windows/System32;C:\Program Files (x86)\Java\jre6\bin; ...
Я также попытался использовать значение по умолчанию java.library.path
(которое содержит C:\Windows\System32
по умолчанию) с test_x86.dll
в C:\Windows\System32
. Не повезло: это также приводит к исключению выше.
У меня всегда есть одна копия test_x86.dll
в папках, которые находятся в java.library.path
, т. Е. Только одна из папок содержит этот файл одновременно.
Вывод:
Кажется, что в Windows 7 x64 C:/Windows/System32
имеет некоторые хитрые ограничения.
Раньше на моей 32-битной машине с Windows XP я никогда не думал об изменениях в папке C:\Windows\System32
и java.library.path
. Я просто использовал System.loadLibrary("test_x86");
вызов с test_x86.dll
в этой папке, и он всегда работал.