Загружаемая DLL в Java - Eclipse - JNI

Я пытаюсь загрузить dll в Java с помощью следующего кода System.loadLibrary("mydll");

Проект помещается в D:\development\project\, и я поместил dll в D:. Я затем дал после аргумента VM в конфигурации затмения-Djava.library.path=D:/

Но когда я работаю, я получаю UnsatisifiedLinkerError. После поиска с помощью Google немного, я использовал System.load("D:\mydll.dll");

но снова получая ту же проблему, мог, кто-то может помочь?

11
задан x.509 29 March 2010 в 03:43
поделиться

3 ответа

Если вы указываете имя файла DLL в пути к библиотеке, опустите это. Кроме того, ваш вызов System.loadLibrary должен быть просто mydll. Я могу сказать вам (по опыту), что если вы поместите DLL в корень вашего проекта в Eclipse (т.е. D: \ Eclipse Workspace \ Proj), она должна работать. Любые другие ошибки компоновщика могут быть связаны с проблемами зависимости при поиске других DLL. Исключение то же самое. Используйте что-то вроде Dependency Walker ( http://www.dependencywalker.com/ ), чтобы узнать, полагается ли ваша DLL на что-нибудь еще, кроме пути к системной библиотеке.

Изменить: UnsatisfiedLinkError : Выбрасывается, если виртуальная машина Java не может найти соответствующее определение на родном языке метода, объявленного родным - похоже, вы используете функцию JNI, которой не существует.

8
ответ дан 3 December 2019 в 05:33
поделиться

Использование System.loadLibrary ("mydll") работает нормально, вы также можете использовать его. Если вы использовали javah и думаете, что с вашей DLL все в порядке, есть две возможности:

  1. JVM не находит вашу DLL : в этом случае путь к вашей библиотеке java неверен (в чем я сомневаюсь), и вам, вероятно, следует установить его на . и поместите вашу DLL в текущий рабочий каталог.
  2. 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 .

Надеюсь, что это поможет.

3
ответ дан 3 December 2019 в 05:33
поделиться

@ alee- Вы можете просто скопировать и вставить файлы dll в папку system32 ваших окон и попытаться вызвать библиотеку через System.loadLibrary (" mydll ") ... думаю, это может сработать ...

0
ответ дан 3 December 2019 в 05:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: