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




native loadlibrary path (8)

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

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

J'ai l'erreur suivante:

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

Puis-je résoudre ce problème en recompilant le .dll pour 64 bits? Comment ferais-je cela? Y at-il une autre solution de contournement que je peux utiliser? SVMLight rend le code source C disponible.


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

A été résolu en téléchargeant DLL à system32



Assurez-vous de régler PATH sur Program Files (x86) pas Program Files . Cela a résolu mon problème.


Il suffit d'installer jdk_x86 et de l'installer dans Program Files (x86) et de définir le chemin jre dans votre projet. C'est tout.


J'ai eu un problème lors de l'exécution red5 (tomcat) sur Windows x64 qui précédemment travaillé sous Windows x32, a eu l'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: \ Program Files (x86) \ Java \ jdk.1.6.0_45

"Variables système"

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


J'avais un problème lié à ceci 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.


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 lui-même sur des fenêtres 64 bits.

Note finale: cet appel à System.loadLibrary est stupide. Appelez System.load avec un chemin complet ou laissez-le rechercher dans java.library.path.


Voici une réponse pour ceux qui compilent à partir de la ligne de commande / Invite de commandes. Cela ne nécessite pas de changer votre variable d'environnement Path ; il vous permet simplement d'utiliser la JVM 32 bits pour le programme avec la DLL 32 bits.

Pour la compilation, peu importe quel javac est utilisé - 32 bits ou 64 bits.

>javac MyProgramWith32BitNativeLib.java

Pour l'exécution du programme, il est important de spécifier le chemin vers la version 32 bits de java.exe

Je vais poster un exemple de code pour Windows , car il semble que ce soit l'OS utilisé par l'OP.

les fenêtres

Très probablement, le code sera quelque chose comme:

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

La différence sera dans les chiffres après jre . Pour trouver les numéros que vous devez utiliser, entrez:

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

Sur ma machine, le processus est le suivant

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>

Donc, je sais que mes numéros 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




jni