Win64 — JNI: UnsatisfiedLinkError: не удается найти зависимые библиотеки

У меня есть собственная dll JNI, которая зависит от нескольких других dll (точнее, Zero MQ). Я скомпилировал эти зависимости для Windows 7 (64-битной) через Visual Studio. Я определил, что получаю 64-битные dll.

На машине разработчика работает нормально. Но если я перенесу эти DLL на другую машину (также Windows 7 64 Bit), я получу ошибку, упомянутую в заголовке.

Я также перенес свою установку minigw-64 на эту машину, чтобы скомпилировать там свою dll. Для этого, разумеется, мне нужны и все остальные dll, и я могу успешно скомпилировать ее. Но если я запускаю файл jar (куда будет загружена моя jni-lib), я получаю эту ошибку UnsatisfiedLinkError.

Я сделал то же самое на обоих ПК. Путь или java.library.path одинаковы для обоих.

Мой стартовый скрипт выглядит так:

set PATH=C:\Path\To\my\dependencies;.;%PATH%
java -jar myjar.jar
pause

Любые идеи, в чем может быть проблема?


person user2071938    schedule 15.06.2015    source источник


Ответы (1)


Проверьте следующее.

1) Убедитесь, что в названии библиотеки нет опечатки.

в случае Linux это должно быть что-то вроде

System.load.library("mylib");

тогда имя библиотеки должно быть похоже на libmylib.so.

2) Вам нужно добавить расположение пути к библиотеке java, например

-Djava.library.path="путь к вашему местоположению dll".

3) Убедитесь, что вы скомпилировали свою библиотеку в той версии Jre, которую вы используете, т.е. (если вы используете 64-битную Jre, вам нужно скомпилировать dll в 64-битной версии). Или вы можете использовать флаги -d32 или -d64, если они доступны в вашем файле jre.

4) Убедитесь, что dll не находится в режиме отладки, так как в этом случае ей потребуются библиотеки времени выполнения отладки Microsoft на машине (я делал это довольно много раз). Если есть какие-либо проблемы с зависимостями, путеводитель должен помочь вам определить проблему с зависимостями.

person Thiyagarajan    schedule 15.06.2015
comment
1) мой файл mylib.dll 2) я сделал это! 3) Я использую его на Windows, та же версия Java на обоих ПК. а dll скомпилирован в 64-битном - person user2071938; 15.06.2015
comment
он говорит java.lang.UnsatisfiedLinkError: D:\path\to\lib\mylib.dll: не удается найти зависимые библиотеки, потому что есть правильный путь. он находит мою dll в пути, но проблема в зависимостях этой dll, верно? - person user2071938; 15.06.2015
comment
Убедитесь, что dll не находится в режиме отладки, так как в этом случае ей потребуются библиотеки времени выполнения отладки Microsoft на машине (у меня это было несколько раз). Если есть какие-либо проблемы с зависимостями, путеводитель должен помочь вам определить проблему с зависимостями. - person Thiyagarajan; 15.06.2015
comment
Проблема действительно заключалась в библиотеках времени выполнения отладки, которые недоступны на другом ПК, пожалуйста, добавьте это в свой ответ, и тогда я приму это! Спасибо! - person user2071938; 15.06.2015
comment
Большое спасибо Thiyaga за отличный ответ. Я тоже собирал dll в режиме отладки, и проблема была решена, когда я собирал dll в режиме выпуска. - person James Selvakumar; 10.05.2019