Как исправить проблему java.lang.UnsatisfiedLinkError с 64-битными / 32-битными системами? - PullRequest
0 голосов
/ 04 февраля 2019

У меня есть 64-битная система, и я хочу запустить Java-приложение, которому нужно загрузить 32-битный dll-файл.Я хочу загрузить библиотеку, используя System.load () .При использовании 64-битной Java-8-JRE возникает следующая ошибка:

java.lang.UnsatisfiedLinkError: C:\[...]\test.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform. 

При запуске приложения на 32-битной Java-6-JRE появляется

java.lang.UnsatisfiedLinkError: C:\[...]\test.dll: Can't find dependent libraries

Я пытался использовать 64-битную версию Java.Поскольку dll - это 32-битная dll, я попытался запустить приложение на 64-битной версии.Но затем возникает другая ошибка.

Я также попытался использовать System.loadLibrary () .Но ошибки кажутся похожими.

Java-8-64-bit:

java.lang.UnsatisfiedLinkError: C:\Windows\System32\test.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform

-> Из-за этой ошибки я могу быть уверен, что java может найти этот файл вgeneral.

Java-6-32-bit:

java.lang.UnsatisfiedLinkError: no test in java.library.path

-> Из-за ошибки, показанной перед тем, как файл должен быть там.

Мой кодприложение очень короткое:

Использование System.load () :

public static void main(String[] args) {
    System.load("C:\\[...]\\test.dll");
}

Использование System.loadLibary() :

public static void main(String[] args) {
    System.loadLibrary("test");
}

Файл имеет все необходимые разрешения.

Типичная ошибка, связанная с отсутствием файла в переменной PATH, может быть вызвана выполнением 64-bit-JVM файл может быть найден, но не может быть прочитан, потому что ему нужна 32-битная JVM.

У кого-нибудь есть идеи?Спасибо!

1 Ответ

0 голосов
/ 04 февраля 2019

Решение очень простое ...

Относительно потока https://stackoverflow.com/a/12307577/11011623 папка System32, где находился мой файл и мои зависимости, просто позволяет 64-битным двоичным файлам находиться вЭто.Так что 32-битный dll не был найден.При использовании System.load () и dll на другом пути система не смогла найти необходимые зависимости в dll, поскольку путь, где находится dll, не является частью пути ...

Решениебыло переместить все необходимые файлы из System32 в папку Windows или добавить пользовательскую папку со всеми dll и ее зависимостями в PATH.Спасибо за все комментарии, которые помогли решить эту проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...