Je ne peux pas charger IA 32 bits.dll sur une plate-forme AMD 64-bit
je suis en train d'utiliser SVMLight à partir de Java, à l'aide de la JNI wrapper sur cette page:
static {
System.loadLibrary("lib/JNI_SVM-light-6.01/lib/svmlight");
}
j'obtiens l'erreur suivante:
... libJNI_SVM-lumière-6.01libsvmlight.dll: ne peut pas charger IA 32-bit .DLL sur un AMD 64 bits plate-forme
puis-je résoudre ce problème en recompilant le .dll 64 bits? comment je ferais ça? Est-il une autre solution que je peux utiliser? SVMLight fait la source de C code disponible.
12 réponses
Oui, vous devrez recompiler le fichier DLL pour 64-bit. Votre seule autre option est de passer à un JVM 32 bits, ou autrement obtenir un processus 32 bits pour charger la DLL en votre nom et communiquer avec ce processus d'une façon ou d'une autre.
j'ai eu le même problème avec une application Java utilisant tibco dll initialement prévu pour fonctionner sur Win XP. Pour le faire fonctionner sur Windows 7, j'ai fait le point d'application à 32-bit JRE. En attendant de voir si il y a une autre solution.
brève réponse à la première question: oui.
réponse plus longue: peut-être; cela dépend si le processus de construction pour SVMLight se comporte sur des fenêtres 64 bits.
note finale: cet appel au système.loadLibrary est stupide. Soit le Système d'appel.chargez avec un chemin d'accès complet ou laissez-le chercher java.bibliothèque.chemin.
avait le même problème dans win64bit et JVM 64bit
a été résolu en téléchargeant dll vers system32
assurez-vous que vous définissez le chemin vers Program Files (x86) Program Files. Qui a résolu mon problème.
cela a entre - http://blog.cedarsoft.com/2010/11/setting-java-library-path-programmatically/
si défini le java.bibliothèque.chemin, doivent avoir les lignes suivantes afin de travailler.
Field fieldSysPath;
fieldSysPath = ClassLoader.class.getDeclaredField( "sys_paths" );
fieldSysPath.setAccessible( true );
fieldSysPath.set( null, null );
propriétés du projet > > Run > > VM options
et mettez cette adresse:
-Djava.library.path="C:\opencv\build\java\x64"
j'ai eu un problème lorsque j'ai lancé red5 (tomcat) sur Windows x64 qui fonctionnait précédemment sous Windows x32, j'ai eu la prochaine erreur:
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 lorsque J'ai installé la version Java x32 et réglé next
"variables d'Environnement"
"variables Utilisateur pour la Maison"
JAVA_HOME => C:\Program fichiers (x86)\Java\jdk.1.6.0_45
"variables Système"
chemin[au début] => C:\Program Fichiers\Java\jdk.1.8.0_60;..
j'avais un problème lié à cela et je 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
à mon dossier system32. J'espère que ce sera utile à quelqu'un.
Voici une réponse pour ceux qui compilent à partir de L'invite ligne de commande/Commande. Il ne nécessite pas de changer votre Path
la variable d'environnement; elle vous permet simplement d'utiliser les 32 bits JVM
pour le programme avec le 32 bits DLL
.
Pour la compilation, il ne devrait pas javac
s'utilise en 32 ou 64 bits.
>javac MyProgramWith32BitNativeLib.java
Pour l'exécution du programme, c' important de spécifier le chemin vers la version 32 bits de java.exe
je vais poster un exemple de code pour Windows
, puisque cela semble être le système d'exploitation utilisé par l'OP.
Windows
très probablement, le code sera quelque chose comme:
>"C:\Program Files (x86)\Java\jre#.#.#_###\bin\java.exe" MyProgramWith32BitNativeLib
La différence est dans le nombre qui suit jre
. Pour trouver les numéros que vous devez utiliser, entrez:
>dir "C:\Program Files (x86)\Java\"
Sur ma machine, le processus est comme suit
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>
alors je sais que mes nombres sont 1.8.0_111
, et ma commande est
C:\Users\me\MyProject>"C:\Program Files (x86)\Java\jre1.8.0_111\bin\java.exe" MyProgramWith32BitNativeLib
ne vous inquiétez pas pour vous devrait juste changer .dll de x64 à x86, dans la bibliothèque native.
par exemple:- vous auriez pu choisir ceci (C:\opencv\build\java\x64).
à la place, vous sélectionnez ceci pour bibliothèque native(C:\opencv\build\java\x86).