Не удается загрузить 32-разрядную библиотеку IA на 64-разрядной платформе AMD. - PullRequest
49 голосов
/ 13 ноября 2011

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

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

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

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

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

Ответы [ 14 ]

69 голосов
/ 13 ноября 2011

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

4 голосов
/ 13 января 2012

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

2 голосов
/ 13 ноября 2011

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

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

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

1 голос
/ 16 июля 2016

Перейти к

Свойства проекта >> Выполнить >> Параметры виртуальной машины

и поставить этот адрес:

-Djava.library.path="C:\opencv\build\java\x64"
1 голос
/ 24 марта 2016

Получил это от - 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 );
1 голос
/ 18 ноября 2015

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

1 голос
/ 25 марта 2015

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

Была решена загрузкой dll в system32

0 голосов
/ 20 мая 2019

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

0 голосов
/ 25 октября 2018

В моем ноутбуке с ОС 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;

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

0 голосов
/ 06 октября 2018

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

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

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

...