2016-04-20 5 views
0

Я снова упал (вроде) в проблеме, которую я уже решил несколько месяцев назад. Мне нужно запустить виртуальную виртуальную машину Java, которая, согласно официальному руководству, нуждается в Java VM 1.4.2, но среда - это Debian GNU/Linux 7 «Wheezy» amd64, и я не нашел эту эксклюзионную версию для этой архитектуры (ни Solaris amd64, ни IA64 не подходят для моего случая). Этот виртуальный POS работает отлично, но в Debian GNU/Linux 6 «Squeeze» i686 (другими словами, в 32-битной архитектуре). Я пытался использовать Oracle JDK 8 64bits. Я запустил execstack над libOasisEMSec.so, который я загрузил еще раз, но в 64 бит, с этого сайта http://rpm.pbone.net/index.php3/stat/4/idpl/27875140/dir/opensuse_13.x/com/compat-32bit-2010.1.31-19.1.2.x86_64.rpm.html. Компиляция хорошо, но исполнение дает мне следующее сообщение об ошибке:Невозможно запустить старый двоичный файл Java в Linux 64 бит

# java -Djava.library.path=/var/www/vhosts/myvirtualshop.com/lib/Digest/linux -classpath /var/www/vhosts/myvirtualshop.com/lib/Digest/linux:/var/www/vhosts/myvirtualshop.com/lib/Digest/linux exampledigest 

Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /var/www/vhosts/myvirtualshop.com/lib/Digest/linux/libOasisEMSec.so which might have disabled stack guard. The VM will try to fix the stack guard now. 
It's highly recommended that you fix the library with 'execstack -c <libfile>', or link it with '-z noexecstack'. 
Exception in thread "main" java.lang.UnsatisfiedLinkError: /var/www/vhosts/myvirtualshop.com/lib/Digest/linux/libOasisEMSec.so: /var/www/vhosts/myvirtualshop.com/lib/Digest/linux/libOasisEMSec.so: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch) 
     at java.lang.ClassLoader$NativeLibrary.load(Native Method) 
     at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1941) 
     at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1857) 
     at java.lang.Runtime.loadLibrary0(Runtime.java:870) 
     at java.lang.System.loadLibrary(System.java:1122) 
     at OasisEMSecImp.<clinit>(OasisEMSecImp.java:9) 
     at exampledigest.main(exampledigest.java:36) 

большой вопрос здесь: как я могу запустить этот старый Java двоичный, в среде 64bits Debian Linux?

+0

Можете ли вы попробуйте запустить ... 'java -d32 -Djava.library.path =/var/www/vhosts/myvirtualshop.com/lib/Digest/linux -classpath /var/www/vhosts/myvirtualshop.com/lib/Digest/linux : /var/www/vhosts/myvirtualshop.com/lib/Digest/linux examplediges' – vidit

+0

У Amazon есть 32-разрядное сжатие Debian AMI (ami-1212ef7b), и вы все равно можете получить Java 1.4.x от Oracle (http: // www .oracle.com/technetwork/Java/javasebusiness/загрузки/Java-архив-доу nloads-javase14-419411.html). Не самое приятное решение, но это может заставить вас двигаться вперед. – stdunbar

+0

@vidit: это ответ JRE 1.8.0_77 64 бит: «Ошибка: этот экземпляр Java не поддерживает 32-разрядную JVM. Пожалуйста, установите нужную версию». – abiyi

ответ

1

Чтобы запустить 32 бит ПРОГРАММЫ на 64-битной системе Вам нужно активировать Multiarch:

apt-get install ia32-libs -y 

См пример 32bit firefox/thunderbird on debian amd64

Если вам нужна более старую версию Sun Java

Вам необходимо скачать его от http://www.oracle.com/technetwork/java/archive-139210.html, распакуйте его самостоятельно и обновите свой $PATH, чтобы указать на него. Возможно, также ваш $JAVA_HOME для некоторых инструментов.

The oficial Installation Notes for Linux

  1. Убедитесь, что выполнение разрешения установлены Выполнить эту команду:

    chmod +x j2re-1_4_2_<version>-linux-i586.bin 
    
  2. Запустите самораспаковывающийся двоичный файл.

    Выполнение загруженного файла, добавленного по пути к нему. Для Например, если файл находится в текущей директории, перед именем « ./» («» необходимо, если не в переменной PATH среды):

    ./j2re-1_4_2_<version>-linux-i586.bin 
    

Note about System Preferences: By default, the installation script configures the system such that the backing store for system preferences is created inside the Java 2 Runtime Environment's installation directory. If the J2RE is installed on a network-mounted drive, it and the system preferences can be exported for sharing with Java runtime environments on other machines. As an alternative, root users can use the -localinstall option when running the installation script, as in this example:

j2re-1_4_2_-linux-i586.bin -localinstall This option causes the system preferences to be stored in the /etc directory from which they can be shared only by VMs running on the local machine. You must be root user for the -localinstall option to work.

+0

Итак, вы говорите мне, что я могу использовать биты Java VM 32 в среде 64-битного Linux, потому что это именно то, что я сделал на первом месте, и это не сработало. Я сделал что-то не так? – abiyi

+1

Вам нужно включить поддержку многократного использования https://www.howtoforge.com/multiarch-how-to-use-32bit-packages-on-a-64bit-system-debian-7-wheezy –