Java Native Interface 32 bit dll sur le système 64 bit

E:CodeJavaJNITest>java test
Exception in thread "main" java.lang.UnsatisfiedLinkError: E:CodeJavaJNITesttest.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(Unknown Source)
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at test.main(test.java:16)`

en utilisant Java Native Interface, j'ai rencontré un problème qui a généré cette erreur. Je crois que c'est parce que j'ai compilé le .dll avec MinGW qui se compile à un 32-bit .dll alors que mon système est 64 bits et donc mon Java fonctionne à 64 bits. Y a-t-il un moyen de forcer mon Java à fonctionner à 32 bits?

25
demandé sur vaxquis 2012-03-18 14:06:38

6 réponses

vous devrez installer un JVM de 32 bits et vous pourrez exécuter votre code.

si vous allez distribuer votre application, vous voudrez construire les versions 32bit et 64bit de votre DLL. Ensuite, utilisez la technique suivante pour avoir la DLL correcte chargé indépendamment de vos clients arch. Ajouter soit un 32 soit un 64 (MyJniDLL32.dll & MyJniDLL64.dll) pour votre fichier de sortie généré.

    String archDataModel = System.getProperty("sun.arch.data.model");
    System.loadLibrary(libraryName+archDataModel);
24
répondu Java42 2012-03-18 10:46:55

juste pour dire l'évidence: pour charger une bibliothèque native construite pour une architecture 32bit, vous devez forcer la JVM à démarrer en mode 32bit.

java -d32 ...

il est possible que vous ayez besoin d'installer une ancienne JVM pour votre plate-forme (par ex. Le Java 7 d'Oracle sur OS X est 64bit seulement, vous devez obtenir le Java 6 D'Apple à partir de leur base de connaissances).

7
répondu fudge 2016-04-01 19:34:13

j'ai reçu ce même message d'erreur (sans la stactrace) après avoir installé le plugin Java pour le navigateur Chrome.

Re-installation de JDK/JRE (ce qui est un environnement de développement), il fixe pour moi.

1
répondu isapir 2013-09-30 17:11:23
  1. Télécharger mingw-w64 .
  2. mettre à Jour votre variable d'Environnement PATH.
  3. créer un programme C nommé test.c qui a implémentation pour votre méthode.
  4. Lancez l'invite de commande cmd suivante

    gcc-Wl,--add-stdcall-alias-I"%JAVA_HOME%\include"- I"%JAVA_HOME%\include\win32"- test partagé.test dll.c

1
répondu arun kumar 2017-01-27 17:29:35

les DLLs sont gérés par l'OS natif. Java délègue simplement L'appel à DLL qui est très étroitement lié à L'OS sur lequel il est compilé. En général, vous ne pouvez pas le faire en ligne droite et ici est le chemin .

mais il y a des solutions de rechange comme WOW64 , ce qui le rend possible. Veuillez consulter ces liens( 1 , 2 )

-2
répondu Santosh 2017-05-23 11:54:25

IA est l'architecture Itanium donc un AMD jvm est en essayant de charger une dll qui a été construit pour Itanium...ne pense pas que cela va fonctionner.

http://en.wikipedia.org/wiki/Itanium

-2
répondu jjr8228 2012-09-21 14:52:39