Я пытаюсь загрузить dll в Java с помощью следующего кода System.loadLibrary("mydll");
Проект помещается в D:\development\project\, и я поместил dll в D:. Я затем дал после аргумента VM в конфигурации затмения-Djava.library.path=D:/
Но когда я работаю, я получаю UnsatisifiedLinkerError. После поиска с помощью Google немного, я использовал System.load("D:\mydll.dll");
но снова получая ту же проблему, мог, кто-то может помочь?
Если вы указываете имя файла DLL в пути к библиотеке, опустите это. Кроме того, ваш вызов System.loadLibrary должен быть просто mydll. Я могу сказать вам (по опыту), что если вы поместите DLL в корень вашего проекта в Eclipse (т.е. D: \ Eclipse Workspace \ Proj), она должна работать. Любые другие ошибки компоновщика могут быть связаны с проблемами зависимости при поиске других DLL. Исключение то же самое. Используйте что-то вроде Dependency Walker ( http://www.dependencywalker.com/ ), чтобы узнать, полагается ли ваша DLL на что-нибудь еще, кроме пути к системной библиотеке.
Изменить: UnsatisfiedLinkError : Выбрасывается, если виртуальная машина Java не может найти соответствующее определение на родном языке метода, объявленного родным - похоже, вы используете функцию JNI, которой не существует.
Использование System.loadLibrary ("mydll")
работает нормально, вы также можете использовать его. Если вы использовали javah
и думаете, что с вашей DLL все в порядке, есть две возможности:
.
и поместите вашу DLL в текущий рабочий каталог. JVM не находит DLL, от которой зависит ваша DLL : Если у вас есть какие-либо зависимые библиотеки в вашей DLL, они НЕ ищутся JVM, а самой Windows. И Windows не знает java.library.path
, поэтому она будет искать их в системной переменной PATH
. Если у вас есть возможность, вы можете установить системную переменную PATH
в положение ваших DLL перед запуском JVM, и все будет хорошо. Или вы можете загрузить все свои библиотеки DLL с помощью JVM следующим образом
System.loadLibrary ("dll_1");
System.loadLibrary ("dll_2");
System .loadLibrary ("dll_3");
где dll_3.dll
зависит от dll_2.dll
, который зависит от dll_1.dll
.
Надеюсь, что это поможет.
@ alee- Вы можете просто скопировать и вставить файлы dll в папку system32 ваших окон и попытаться вызвать библиотеку через System.loadLibrary (" mydll ") ... думаю, это может сработать ...