JNI - System.LoadLibrary() находит неправильную зависимую DLL

Я связываю нативную библиотеку C++ с моим приложением Java, используя JNI. Я загрузил свою библиотеку, используя System.loadLibrary(), и все, кажется, работает. Я добавил функциональность в мою C++ DLL, которая теперь делает вызовы в несколько других DLL из сторонних программных систем. К сожалению, одна из этих библиотек называется ZIP.dll. Операция java loadLibrary находит эту зависимую dll в /jre/bin, прежде чем искать в каталоге моего проекта, поэтому она пытается использовать эту. Два dll не идентичны, поэтому я получаю UnsatisfiedLinkError о том, что указанная процедура не может быть найдена.

Есть ли способ сказать Java, где искать зависимые библиотеки при загрузке DLL?

2 ответа

Я верю System.load с полным именем пути, а не System.loadLibrary должен сделать свое дело.

Я не думаю, что можно загружать две разные DLL с одинаковыми именами одновременно. Вы можете либо изменить порядок на пути так, чтобы сначала загружался правильный ZIP.dll (это может затем вызвать проблемы с jvm), либо вы можете переименовать файл ZIP.dll в другое. Переименование вашего ZIP.dll, вероятно, самый простой способ.

Другие вопросы по тегам