Как запустить 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
Любая идея, что еще нужно сделать здесь?
Ответы
Ответ 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-битные ссылки.