web-dev-qa-db-fra.com

Impossible de charger le fichier .dll IA 32 bits sur une plate-forme AMD 64 bits

J'essaie d'utiliser SVMLight de Java, en utilisant le wrapper JNI de cette page :

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

Je reçois l'erreur suivante:

... lib\JNI_SVM-light-6.01\lib\svmlight.dll: Impossible de charger le fichier .dll sur une plate-forme AMD 64 bits

Puis-je résoudre ce problème en recompilant le fichier .dll pour 64 bits? Comment pourrais-je m'y prendre? Existe-t-il une autre solution de contournement que je puisse utiliser? SVMLight rend le code source C disponible.

46
Nick Heiner

Oui, vous devrez recompiler le DLL pour 64 bits. Votre seule autre option consiste à basculer vers une JVM 32 bits ou à demander à un processus 32 bits de charger la DLL en votre nom et de communiquer avec ce processus.

66
Daniel Pryden

J'ai eu le même problème avec une application Java utilisant tibco dll qui devait à l'origine fonctionner sous Windows XP. Pour que cela fonctionne sous Windows 7, j'ai fait en sorte que l'application pointe sur JRE 32 bits. En attendant de voir s'il existe une autre solution.

4
aditya

Réponse courte à la première question: oui.

Réponse plus longue: peut-être; cela dépend si le processus de construction de SVMLight se comporte sur des fenêtres 64 bits.

Note finale: cet appel à System.loadLibrary est idiot. Appelez System.load avec un chemin d'accès complet ou laissez-le rechercher Java.library.path.

2
bmargulies

Je l'ai obtenu de - http://blog.cedarsoft.com/2010/11/setting-Java-library-path-programmatically/

Si vous définissez Java.library.path, vous devez disposer des lignes suivantes pour pouvoir fonctionner.

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

Avait le même problème dans Win64bit et JVM 64bit

A été résolu en téléchargeant dll sur system32 

1
Yaro

Aller à

Propriétés du projet >> Exécuter >> Options VM

et mettez cette adresse:

-Djava.library.path="C:\opencv\build\Java\x64"
1
eng_hish

Assurez-vous que vous définissez PATH sur Program Files (x86) not Program Files . Cela a résolu mon problème.

1
Wojciechu

Ne vous inquiétez pas, vous devriez simplement changer .dll de x64 à x86, dans la bibliothèque native.

par exemple, vous avez peut-être sélectionné cette option (C:\opencv\build\Java\x64).

à la place, vous sélectionnez cette option pour la bibliothèque native (C:\opencv\build\Java\x86).

0
Akash

Il suffit d’aller pour installer download jdk_x86 et il s’installe dans Program Files (x86) et définit le chemin jre dans votre projet. C'est tout.

0
JoboFive

Mon ordinateur portable Windows a les clients 32 et 64 bits que j'ai commencé à faire face tout d'un coup, puis j'ai réordonné la variable de chemin comme ci-dessous 

Avant:

C:\app\Oracle64\product\12.1.0\client_1\bin;
C:\app\Oracle32\product\12.1.0\client_1\bin;

Après:

C:\app\Oracle32\product\12.1.0\client_1\bin;
C:\app\Oracle64\product\12.1.0\client_1\bin;

commencé à travailler ... J'espère que cela aide tout le monde.

0
Nagesh Kothakota

J'ai eu un problème lors de l'exécution de Red5 (Tomcat) sur Windows x64 qui fonctionnait auparavant sous Windows x32, erreur suivante:

 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)

Problème résolu lors de l'installation de la version Java x32 et de la configuration suivante 

"Variables d'environnement"

"Variables utilisateur pour la maison"

Java_HOME => C:\Fichiers de programme (x86)\Java\jdk.1.6.0_45

"Variables système"

Chemin d'accès [au début] => C:\Program Files\Java\jdk.1.8.0_60; ..

0
Denys Zotov

J'ai eu un problème lié à cela et lisais 

"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.

J'ai résolu mon problème en copiant la dll dans C:\opencv\build\Java\x64 dans mon dossier system32. J'espère que cela aidera quelqu'un.

0
Oti