2016-04-20 4 views
0

Ich bin (wieder) in ein Problem gefallen, das ich schon Monate zuvor gelöst habe. Ich muss ein Java Virtual POS ausführen, das laut dem offiziellen Handbuch die Java VM 1.4.2 benötigt, aber die Umgebung ist Debian GNU/Linux 7 "Wheezy" amd64, und ich habe diese Version für diese Architektur nicht gefunden (noch Solaris amd64 oder IA64 passen zu meinem Fall). Das Virtual POS funktioniert einwandfrei, aber in Debian GNU/Linux 6 "Squeeze" i686 (mit anderen Worten, in einer 32bit Architektur). Ich habe versucht, das Oracle JDK 8 64bits zu verwenden. Ich habe execstack über libOasisEMSec.so, die ich noch einmal heruntergeladen, aber in 64 Bits, von dieser Seite 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. Die Zusammenstellung ist in Ordnung, aber die Ausführung gibt mir die folgende Fehlermeldung:Unabled, um eine alte Java-Binärdatei in einem 64-Bit-Linux zu laufen

# 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) 

Die große Frage ist: Wie kann ich diese alte Java Binary laufen, in einer Umgebung mit Debian Linux 64-Bit?

+0

Können Sie versuchen Sie es mit ... '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 examplesdiages' – vidit

+0

Amazon hat ein 32-Bit Debian Squeeze AMI (ami-1212ef7b) und Sie können immer noch Java 1.4.x von Oracle bekommen (http: // www .oracle.com/technetwork/java/javasebusiness/downloads/java-archiv-dow nloads-javase14-419411.html). Nicht die schönste Lösung, aber es könnte Sie weiterbringen. – stdunbar

+0

@vidit: Dies ist die JRE 1.8.0_77 64-Bit-Antwort: "Fehler: Diese Java-Instanz unterstützt keine 32-Bit-JVM. Bitte installieren Sie die gewünschte Version." – abiyi

Antwort

1

Um 32-Bit-Programme auf 64-Bit-System ausführen müssen Sie Multiarch aktivieren:

apt-get install ia32-libs -y 

Siehe Beispiel 32bit firefox/thunderbird on debian amd64

Wenn Sie eine ältere Version von Sun Java

Sie herunterladen müssen müssen es von http://www.oracle.com/technetwork/java/archive-139210.html, entpacken Sie es, und aktualisieren Sie Ihre $PATH, um darauf zu zeigen. Möglicherweise auch Ihre $JAVA_HOME für einige Werkzeuge.

The oficial Installation Notes for Linux

  1. Stellen Sie sicher, dass Ausführungsberechtigungen Führen Sie diesen Befehl gesetzt werden:

    chmod +x j2re-1_4_2_<version>-linux-i586.bin 
    
  2. Führen Sie das selbstextrahierende Binärdatei.

    Führen Sie die heruntergeladene Datei aus, die dem Pfad vorangestellt ist. Für Beispiel, wenn die Datei im aktuellen Verzeichnis befindet, fügen Sie den Pfad " ./" ("" notwendig, wenn in der Umgebungsvariable PATH nicht):

    ./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

Also, was Sie mir sagen, ist, dass ich eine Java VM 32 Bit in einer Linux 64 Bit Umgebung verwenden kann, denn genau das habe ich an erster Stelle getan und es hat nicht funktioniert. Habe ich etwas falsch gemacht? – abiyi

+1

Sie müssen Multiarch-Unterstützung aktivieren https://www.howtoforge.com/multiarch-how-to-use-32bit-packages-on-a-64bit-system-debian-7-wheezy –