2012-02-22 15 views
17

Estoy tratando de ejecutar una JVM de punto de acceso de 32 bits en una máquina Debian Mint de 64 bits. A primera vista, todas las obras hasta que se va a tratar de ejecutar algo con swing:¿Cómo ejecutar una JVM de 32 bits en un Linux de 64 bits?

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 

Agregando que a la ruta de la biblioteca: export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu.

Pero entonces se da este error:

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

alguna idea de qué más tiene que hacer aquí?

+5

Los procesos de 32 bits no pueden cargar bibliotecas de 64 bits. Necesitarás instalar bibliotecas de compatibilidad de 32 bits. En Ubuntu necesitarías instalar el paquete 'ia32-libs'. No sé cuál es el equivalente en Debian. – Jesper

+1

* ¿Por qué * intentas ejecutar una JVM de 32 bits en una máquina de 64 bits nuevamente? – Marcelo

+0

encontrar un libXext de 32 bits? –

Respuesta

15

Para poder utilizar la JVM de 32 bits, deberá tener instaladas las bibliotecas de compatibilidad de 32 bits. El segundo mensaje de error significa que el proceso JVM de 32 bits está intentando cargar una biblioteca de 64 bits; eso no funciona

En Ubuntu tendrías que instalar el paquete ia32-libs, que contiene las bibliotecas de compatibilidad de 32 bits para Ubuntu de 64 bits.

ACTUALIZACIÓN: Ubuntu 13.10 introduce múltiples arquitecturas que sustituyó ia32-libs con libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386. Fuente: https://stackoverflow.com/a/10473415/14731

3

Si desea utilizar referencias de 32 bits, utilice la JVM de 64 bits. Se utiliza referencias de 32 bits de forma predeterminada durante un máximo de 32 GB de memoria (más de un programa de 32 bits puede normalmente) del 6 actualización de Java 23.

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

@Hot lame comenta que la JVM de IBM puede Acceda a hasta 68 GB con un "modo de 32/64 bit"

Si necesita usar más de esta cantidad (o algo así), usaría la memoria de pila. Esto mantiene el tiempo GC completo bajo control y significa que siempre puede usar referencias de 32 bits.

+0

¡Gracias! No sabía que los "oops comprimidos" estaban habilitados por defecto ahora. Y es por eso que no hizo ninguna diferencia para Netbeans. Ya estaba usando referencias de 32 bits. Entonces al final no hace ninguna diferencia. Es extraño que el equipo de soporte de Netbeans me pidiera que ejecutara una JVM de 32 bits ... –

+0

A menudo me asombra cuando veo consejos sobre SO que están 5-10 años fuera de fecha. ;) Es bastante natural suponer que un proceso de 64 bits utiliza punteros de 64 bits, lo hace en C, que se supone que es el más eficiente. –

+0

Supongo que sería mejor de alguna manera. Pero he tenido a mucha gente diciéndole al cliente que JVM (32 bits) es algo más rápido. Y en "Java Performance", un libro reciente, se afirma que esto se debe a que algunos cachés contienen más entradas porque son más pequeños. Por lo tanto, una mejor tasa de aciertos. De ahí el aumento del rendimiento. Siempre estoy corriendo con el oops comprimido. Pero ignorado hasta ahora, se aplicó por defecto para 32 GB o menos. –

6

he tenido problemas similares con CentOS 6.4 y la solución fue instalar los equivalentes ia32-libs (como root): yum install glibc.i686 libXext.i686 libXtst.i686

+0

Intenté lo anterior, pero recibo No hay paquete disponible. No hay ningún paquete glibc.i686 disponible. No hay paquete libXext.i686 disponible. No hay paquete libXtst.i686 disponible. –

+0

Gracias de los usuarios de CentOS/RedHat/Fedora. Solo tenga en cuenta que para el último JRE/JDK también se necesita el paquete libgcc.i686. – Dime

12

yo sólo tenían el mismo problema en Ubuntu 14.04, donde quería mantener mi 32 -bit Oracle Java en una instalación de 64 bits. ia32-libs se ha ido desde Ubuntu 13.10, y ahora la respuesta glib es "simplemente descargue las bibliotecas i386 que necesita". Lamentablemente, no parece haber una manera fácil de descubrir qué bibliotecas son.

El recurso sencillo es instalar 32 bits OpenJDK como

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

que tira en un gran número de bibliotecas i386. Puede desinstalar el OpenJDK nuevamente si lo desea, pero lo dejé en su lugar para no eliminar automáticamente las bibliotecas.

Ponga Oracle JDK en la RUTA, y ahora Eclipse y NetBeans comenzarán bien.

+0

Muchas gracias por esa respuesta Cayhorstmann. Guardado mi tocino! – mbrinson

+0

ia32-libs ya no existe. Este resolvió el problema, ¡gracias! –

Cuestiones relacionadas