Как запустить 32-битную JVM на 64-битной Linux? - PullRequest
17 голосов
/ 22 февраля 2012

Я пытаюсь запустить 32-битную JVM Hotspot на 64-битной машине Debian Mint. На первый взгляд все работает, пока вы не попробуете запустить что-то с помощью 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

Добавление этого к пути к библиотеке: export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu.

Но тогда выдает эту ошибку:

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

Есть идеи, что еще нужно сделать здесь?

Ответы [ 4 ]

15 голосов
/ 22 февраля 2012

Чтобы иметь возможность использовать 32-разрядную JVM, вам необходимо установить 32-разрядные библиотеки совместимости. Второе сообщение об ошибке означает, что 32-разрядный процесс JVM пытается загрузить 64-разрядную библиотеку; это не работает.

В Ubuntu вам нужно установить пакет ia32-libs, который содержит 32-битные библиотеки совместимости для 64-битной Ubuntu.

ОБНОВЛЕНИЕ : Ubuntu 13.10 представила многоархивную систему, которая заменила ia32-libs на libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386. Источник: https://stackoverflow.com/a/10473415/14731

12 голосов
/ 09 января 2014

У меня была такая же проблема в Ubuntu 14.04, где я хотел сохранить мою 32-битную Oracle Java на 64-битной установке. ia32-libs отсутствует с Ubuntu 13.10, и теперь ответ glib «просто скачайте необходимые библиотеки i386». К сожалению, нет простого способа узнать, какие это библиотеки.

Простое решение - установить 32-битный OpenJDK как

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

Это тянет за собой большое количество библиотек i386. Вы можете удалить OpenJDK снова, если хотите, но я оставил его на месте, чтобы случайно не удалять библиотеки.

Поместите Oracle JDK в PATH, и теперь Eclipse и NetBeans будут работать нормально.

6 голосов
/ 16 августа 2013

У меня были похожие проблемы с CentOS 6.4, и решение было установить эквиваленты ia32-libs (как root): yum install glibc.i686 libXext.i686 libXtst.i686

3 голосов
/ 22 февраля 2012

Если вы хотите использовать 32-битные ссылки, используйте 64-битную JVM. По умолчанию он использует 32-разрядные ссылки для хранения до 32 ГБ (больше, чем обычно может 32-разрядная программа) из Java 6 с обновлением 23.

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

@ Hot Licks отмечает, что IBM JVM может получить доступ к 68 ГБ в «32/64 битном режиме»

Если вам нужно использовать больше, чем это количество (или что-то подобное), я бы использовал кучу памяти. Это позволяет контролировать полное время GC и означает, что вы всегда можете использовать 32-битные ссылки.

...