web-dev-qa-db-fra.com

Comment exécuter une JVM 32 bits sur un Linux 64 bits?

J'essaie d'exécuter une machine virtuelle Java Hotspot 32 bits sur une machine Debian Mint 64 bits. À première vue, tout fonctionne jusqu'à ce que vous essayiez d'exécuter quelque chose à l'aide de Swing:

Java.lang.UnsatisfiedLinkError: /opt/javadev/jdk1.7.0_03_32b/jre/lib/i386/xawt/libmawt.so:   
libXext.so.6: cannot open shared object file: No such file or directory

Ajout de cela au chemin de la bibliothèque: export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu.

Mais cela donne cette erreur:

Java.lang.UnsatisfiedLinkError: /opt/javadev/jdk1.7.0_03_32b/jre/lib/i386/xawt/libmawt.so: 
libXext.so.6: wrong ELF class: ELFCLASS64

Une idée de quoi d'autre doit être fait ici?

19
Jan Goyvaerts

Pour pouvoir utiliser la JVM 32 bits, vous devez installer les bibliothèques de compatibilité 32 bits. Le deuxième message d'erreur signifie que le processus JVM 32 bits tente de charger une bibliothèque 64 bits; ça ne marche pas.

Sur Ubuntu, vous devez installer le package ia32-libs, qui contient les bibliothèques de compatibilité 32 bits pour Ubuntu 64 bits.

[~ # ~] mise à jour [~ # ~] : Ubuntu 13.10 a introduit le multi-Arch qui a remplacé ia32-libs avec libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386. Source: https://stackoverflow.com/a/10473415/14731

15
Jesper

Je viens d'avoir le même problème sur Ubuntu 14.04, où je voulais garder mon Oracle 32 bits Java sur une installation 64 bits. Ia32-libs a disparu depuis Ubuntu 13.10, et maintenant la glib La réponse est "il suffit de télécharger les bibliothèques i386 dont vous avez besoin". Malheureusement, il ne semble pas y avoir de moyen facile de savoir de quelles bibliothèques il s'agit.

Le remède simple consiste à installer OpenJDK 32 bits en tant que

Sudo apt-get install openjdk-7-jdk:i386

Cela attire un grand nombre de bibliothèques i386. Vous pouvez désinstaller OpenJDK à nouveau si vous le souhaitez, mais je l'ai laissé en place afin de ne pas supprimer accidentellement les bibliothèques.

Mettez Oracle JDK sur le PATH, et maintenant Eclipse et NetBeans démarreront correctement.

12
cayhorstmann

J'ai eu des problèmes similaires avec CentOS 6.4 et la solution était d'installer les équivalents ia32-libs (en tant que root): yum install glibc.i686 libXext.i686 libXtst.i686

6
Jim H

Si vous souhaitez utiliser des références 32 bits, utilisez la machine virtuelle Java 64 bits. Il utilise des références 32 bits par défaut pour jusqu'à 32 Go de mémoire (plus qu'un programme 32 bits peut normalement) de Java 6 update 23.

http://docs.Oracle.com/javase/7/docs/technotes/guides/vm/performance-enhancements-7.html

@Hot Licks commente que la JVM IBM peut accéder jusqu'à 68 Go avec un "mode 32/64 bits"

Si vous avez besoin d'utiliser plus que ce montant (ou même quelque chose comme ça), j'utiliserais de la mémoire hors tas. Cela permet de contrôler les temps GC complets et signifie que vous pouvez toujours utiliser des références 32 bits.

3
Peter Lawrey