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.

44
demandé sur Bhargav Rao 2011-11-13 20:50:26

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.

65
répondu Daniel Pryden 2011-11-13 16:54:25

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.

4
répondu aditya 2012-01-13 15:56:17

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.

2
répondu bmargulies 2011-11-13 18:47:46

avait le même problème dans win64bit et JVM 64bit

a été résolu en téléchargeant dll vers system32

1
répondu Yaro 2015-03-25 15:40:05

assurez-vous que vous définissez le chemin vers Program Files (x86) Program Files. Qui a résolu mon problème.

1
répondu Wojciechu 2015-11-18 14:08:53

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 );
1
répondu Vincent Tan 2016-03-24 02:07:01

propriétés du projet > > Run > > VM options

et mettez cette adresse:

-Djava.library.path="C:\opencv\build\java\x64"
1
répondu eng_hish 2016-07-15 23:57:05

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

0
répondu Denys Zotov 2015-10-16 17:09:47

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.

0
répondu Oti 2016-09-23 06:27:56

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
0
répondu bballdave025 2016-11-16 01:20:35

il suffit d'aller à installer télécharger jdk_x86 et il s'installe dans les fichiers de programme (x86) et définit le chemin jre dans votre projet. Thats it.

0
répondu JoboFive 2018-05-16 09:57:50

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

0
répondu Akash 2018-10-06 05:47:43