Подтвердить что ты не робот

Невозможно загрузить IA 32-bit.dll на 64-разрядную платформу AMD

Я пытаюсь использовать SVMLight из Java, используя Оболочка JNI на этой странице:

  static {
    System.loadLibrary("lib/JNI_SVM-light-6.01/lib/svmlight");
  }

Я получаю следующую ошибку:

... lib\JNI_SVM-light-6.01\lib\svmlight.dll: Не удается загрузить IA 32-разрядную .dll на 64-битной платформе AMD

Могу ли я решить эту проблему, перекомпилировав DLL для 64-битного? Как я могу это сделать? Есть ли другой способ обхода? SVMLight делает исходный код C доступным.

4b9b3361

Ответ 1

Да, вам придется перекомпилировать DLL для 64-битного. Единственный другой вариант - переключиться на 32-разрядную JVM или получить 32-разрядный процесс для загрузки DLL от вашего имени и как-то связаться с этим процессом.

Ответ 2

У меня была такая же проблема с приложением Java, использующим dll tibco, первоначально предназначенную для запуска в Win XP. Чтобы заставить его работать в Windows 7, я применил приложение к 32-разрядной JRE. Ожидание, есть ли другое решение.

Ответ 3

Короткий ответ на первый вопрос: да.

Более длинный ответ: возможно; это зависит от того, ведет ли процесс сборки SVMLight себя в 64-битных окнах.

Заключительное примечание: этот вызов в System.loadLibrary глуп. Либо вызовите System.load с полным именем пути, либо пусть он будет искать java.library.path.

Ответ 4

Была ли такая же проблема в win64bit и JVM 64bit

Была решена путем загрузки dll в system32

Ответ 5

Убедитесь, что вы устанавливаете PATH в Program Files (x86) не Program Files. Это решило мою проблему.

Ответ 6

Получил это от - http://blog.cedarsoft.com/2010/11/setting-java-library-path-programmatically/

Если задано java.library.path, для работы необходимо иметь следующие строки.

Field fieldSysPath;
fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
fieldSysPath.setAccessible( true );
fieldSysPath.set( null, null );

Ответ 7

Перейдите к

Свойства проекта → Выполнить → Параметры VM

и поместите этот адрес:

-Djava.library.path="C:\opencv\build\java\x64"

Ответ 8

У меня возникла проблема при запуске red5 (tomcat) в Windows x64, который ранее работал под Windows x32, получил следующую ошибку:

 INFO pool-15-thread-1 com.home.launcher.CommandLauncher - Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\....\lib\Data Samolet.dll: Can't find dependent libraries
INFO pool-15-thread-1 com.home.launcher.CommandLauncher - at java.lang.ClassLoader$NativeLibrary.load(Native Method)

Проблема решена, когда я установил версию Java x32 и установил следующий

"Переменные среды"

"Пользовательские переменные для дома"

JAVA_HOME = > C:\Program Files (x86)\Java\jdk.1.6.0_45

"Системные переменные"

Путь [в начале] = > C:\Program Files\Java\jdk.1.8.0_60;..

Ответ 9

У меня была проблема, связанная с этим, и я читал

"Exception in thread "main" java.lang.UnsatisfiedLinkError: C:\opencv\build\java\x86\opencv_java2413.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform "and it took me an entire night to figure out.

Я решил свою проблему, скопировав dll в C:\opencv\build\java\x64 в папку system32. Надеюсь, это поможет кому-то.

Ответ 10

Вот ответ для тех, кто компилируется из командной строки /Command Prompt. Это не требует изменения вашей переменной среды Path; он просто позволяет использовать 32-разрядный JVM для программы с 32-разрядным DLL.

Для компиляции не имеет значения, какой из javac используется - 32-разрядный или 64-разрядный.

>javac MyProgramWith32BitNativeLib.java

Для фактического выполнения программы важно указать путь к 32-разрядной версии java.exe

Я отправлю пример кода для Windows, так как это, похоже, ОС, используемая OP.

Окно

Скорее всего, код будет выглядеть примерно так:

>"C:\Program Files (x86)\Java\jre#.#.#_###\bin\java.exe" MyProgramWith32BitNativeLib 

Разница будет в числах после jre. Чтобы найти номера, которые вы должны использовать, введите:

>dir "C:\Program Files (x86)\Java\"

На моей машине процесс выглядит следующим образом

C:\Users\me\MyProject>dir "C:\Program Files (x86)\Java"
 Volume in drive C is Windows
 Volume Serial Number is 0000-9999

 Directory of C:\Program Files (x86)\Java

11/03/2016  09:07 PM    <DIR>          .
11/03/2016  09:07 PM    <DIR>          ..
11/03/2016  09:07 PM    <DIR>          jre1.8.0_111
               0 File(s)              0 bytes
               3 Dir(s)  107,641,901,056 bytes free

C:\Users\me\MyProject>

Итак, я знаю, что мои номера 1.8.0_111, а моя команда

C:\Users\me\MyProject>"C:\Program Files (x86)\Java\jre1.8.0_111\bin\java.exe" MyProgramWith32BitNativeLib

Ответ 11

Просто зайдите, чтобы установить загрузку jdk_x86 и установить ее в Program Files (x86) и установить путь jre в вашем проекте. Это оно.

Ответ 12

Не беспокойтесь о том, что вам нужно просто изменить .dll с x64 на x86 в собственной библиотеке.

например: - вы могли выбрать это (C:\opencv\build\java\x64).

вместо этого вы выбираете это для собственной библиотеки (C:\opencv\build\java\x86).

Ответ 13

Мой ноутбук с Windows имеет 32 и 64 битные клиенты, с которыми я столкнулся внезапно, затем я переупорядочил переменную пути, как показано ниже

До:

C:\app\oracle64\product\12.1.0\client_1\bin;
C:\app\oracle32\product\12.1.0\client_1\bin;

После:

C:\app\oracle32\product\12.1.0\client_1\bin;
C:\app\oracle64\product\12.1.0\client_1\bin;

начал работать... Надеюсь, это поможет всем.

Ответ 14

Для вашей нативной библиотеки, используйте X64 поверх X86. По крайней мере, эта исправленная проблема у меня была.