2012-02-22 2 views
17

Я пытаюсь запустить 32-битную Hotspot JVM на 64-битной машине Mint Mint. На первый взгляд все это работает, пока вы не будете пытаться запустить что-то с помощью Swing:Как запустить 32-битную JVM на 64-битном Linux?

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 

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

+5

32-разрядные процессы не могут загружать 64-разрядные библиотеки. Вам нужно будет установить 32-разрядные библиотеки совместимости. На Ubuntu вам нужно будет установить пакет 'ia32-libs'. Не знаю, что такое эквивалент на Debian. – Jesper

+1

* Почему вы пытаетесь снова запустить 32-битную JVM на 64-битной машине? – Marcelo

+0

найти 32-битный libXext? –

ответ

15

Чтобы иметь возможность использовать 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

3

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

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

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

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

+0

Спасибо! Я не знал, что «сжатые oops» теперь были включены по умолчанию. Вот почему это не имело никакого значения для Netbeans. Он уже использовал 32-битные ссылки. Поэтому, в конце концов, это не имеет никакого значения. Странно, что команда поддержки Netbeans попросила меня запустить 32-битную JVM ... –

+0

Я часто удивляюсь, когда вижу совет по SO, который 5 - 10 лет устарел. ;) Его вполне естественно предположить, что 64-битный процесс использует 64-битные указатели, он делает в C, который считается наиболее эффективным. –

+0

Думаю, в какой-то мере было бы лучше. Но у меня было много людей, которые говорили, что клиентская JVM (32 бит) работает несколько быстрее. В недавней книге «Производительность Java» говорится, что это связано с тем, что в кеше содержится больше записей, потому что они меньше. Следовательно, лучший показатель успеха. Следовательно, увеличение производительности. Я всегда работаю со сжатыми oops on. Но до сих пор он игнорировался по умолчанию для 32 ГБ или ниже. –

6

Я имел аналогичные проблемы с CentOS 6.4 и решение было установить ia32-ЛИЭС эквиваленты (как корень): yum install glibc.i686 libXext.i686 libXtst.i686

+0

Я пробовал выше, но я получаю Нет доступных пакетов. Нет пакета glibc.i686. Доступен пакет libXext.i686. Доступен пакет libXtst.i686. –

+0

Спасибо пользователям CentOS/RedHat/Fedora. Просто отметьте, что для последней JRE/JDK необходим пакет libgcc.i686. – Dime

12

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

+0

Большое спасибо за этот ответ Cayhorstmann. Спасла мой бекон! – mbrinson

+0

ia32-libs больше не существует. Это решило проблему, спасибо! –

Смежные вопросы