Как запустить 32-битную JVM на 64-битной Linux? - программирование
Подтвердить что ты не робот

Как запустить 32-битную JVM на 64-битной Linux?

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

Любая идея, что еще нужно сделать здесь?

4b9b3361

Ответ 1

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

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

UPDATE: Ubuntu 13.10 представил многоэлементный, который заменил ia32-libs на libstdc++6:i386 libgcc1:i386 zlib1g:i386 libncurses5:i386. Источник: fooobar.com/questions/25324/...

Ответ 2

У меня была такая же проблема на 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 начнут нормально работать.

Ответ 3

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

Ответ 4

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

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

@Hot Licks комментирует, что IBM JVM может получить доступ до 68 ГБ с "32-битным 64-разрядным режимом"

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