Linux 14.981 Themen, 106.344 Beiträge

Programmversion

Jerry6 / 9 Antworten / Flachansicht Nickles

Hallo Leute,
ich habe kürzlich ein Programm von einer Heft-CD aus aktualisiert. Das Programm ließ sich anschließend nicht mehr starten. Möglicherweise lag es daran, dass die Heft-CD die 32-bit-Variante über die installierte 64-bit-Version des Programmes gespielt hat. Erst nachdem ich das *.i586-Paket deinstalliert hatte, ließ sich das *.x86_64-Paket installieren. Nun meine Frage: Wie kann ich ermitteln, ob ein besimmtes Programm (oder library o.ä.) in der 32- oder in der 64-bit-Variante vorliegt? Kann jemand eine entsprechende Ausgabe posten?
Ich nutze Suse 10.2.
Danke.
Jerry

bei Antwort benachrichtigen
KarstenW Jerry6 „Programmversion“
Optionen

Das ist relativ simple zu machen. Bei Linux (und Unix) gibt es den file Befehl:

/usr/bin$ file nero
nero: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.4.1, dynamically linked (uses shared libs), for GNU/Linux 2.4.1, stripped

Bei Unix/Linux kann man auch viele Dateien am Dateiende oder Suffix erkennen. file ist aber besser programmiert. file "schaut" direkt in die Datei rein und erkennt bestimmt typische Dateigenschaften.

ELF ist das typische Binärformat von Linux,

"dynamically linked (uses shared libs)" bedeutet, das Programm ist auf Bibliotheken angewiesen die auch auf dem Rechner installiert sein müssen damit es funktioniert

"stripped" bedeutet das keine Debuginformationen in dieser Datei vom Complier gcc reingeschrieben worden sind, damit der Debugger gdb dieses Programm debuggen kann.
Bei Windows sagt man zu so einem Programm "Releaseversion" (das Gegenteil wäre Debugversion)

Das Problem bei 32 bit Programmen die in einer 64 bit Umgebung installiert werden ist nur die Registerbreite der Bibliotheken.
Der Betriebsystemkern selbst unterstützt die Ausführung eines 32 bit Programmes, aber die 64 bit Bibliotheken passen nicht zu einem 32 bit Programm.
Man kann solche 32 bit Programm in einer 32 bit Umgebung installieren, aber dazu muß eine chroot (change root) Umgebung eingerichtet werden. Mir ist der Konfigurationsaufwand zu groß.
Meist ist es leicher eine 32 bit Linuxversion in einem Emulator wie VMware zu installieren und dort die 32 bit Version zu starten.



PS: SUSE hat keinen Paketmanager wie apt bei Debian. Wenn du fremde Programme installieren willst, die unter einer anderen Linuxdistribution programmiert wurde, dann mußt du die notwendigen Bibliotheken noch selbst von deiner SUSE Distribution nachinstallieren:
Du kannst mit dem Programm ldd dir anzeigen lassen welche Bibliotheken das Programm braucht. Wenn da in einer Zeile stehen sollte, das die entsprechende Bibliothek noch nicht installiert ist, dann mußt du diese Datei noch selbst mit yast nachinstallieren:

Das Brennprogramm nero braucht diese Bibliotheken damit es richtig funktioniert. Ein paar von diesen Dateien mußt du von SUSE eventuell noch nachinstallieren.

/usr/bin$ ldd nero

linux-gate.so.1 => (0xffffe000)
libgtk-x11-2.0.so.0 => /usr/lib/libgtk-x11-2.0.so.0 (0xb7bfc000)
libgdk-x11-2.0.so.0 => /usr/lib/libgdk-x11-2.0.so.0 (0xb7b7a000)
libatk-1.0.so.0 => /usr/lib/libatk-1.0.so.0 (0xb7b60000)
libgdk_pixbuf-2.0.so.0 => /usr/lib/libgdk_pixbuf-2.0.so.0 (0xb7b4a000)
libpangoxft-1.0.so.0 => /usr/lib/libpangoxft-1.0.so.0 (0xb7b43000)
libpangox-1.0.so.0 => /usr/lib/libpangox-1.0.so.0 (0xb7b38000)
libpango-1.0.so.0 => /usr/lib/libpango-1.0.so.0 (0xb7afe000)
libgobject-2.0.so.0 => /usr/lib/libgobject-2.0.so.0 (0xb7ac3000)
libgmodule-2.0.so.0 => /usr/lib/libgmodule-2.0.so.0 (0xb7ac0000)
libdl.so.2 => /lib/tls/libdl.so.2 (0xb7abc000)
libgthread-2.0.so.0 => /usr/lib/libgthread-2.0.so.0 (0xb7ab8000)
libglib-2.0.so.0 => /usr/lib/libglib-2.0.so.0 (0xb7a26000)
libNeroAPI.so => /usr/lib/libNeroAPI.so (0xb747a000)
libNeroSCSI.so => /usr/lib/libNeroSCSI.so (0xb743e000)
libNeroErr.so => /usr/lib/libNeroErr.so (0xb7409000)
libNeroCDR.so => /usr/lib/libNeroCDR.so (0xb736d000)
libNewTrf.so => /usr/lib/libNewTrf.so (0xb72cc000)
libstdc++.so.6 => /usr/lib/libstdc++.so.6 (0xb71e7000)
libm.so.6 => /lib/tls/libm.so.6 (0xb71c2000)
libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb71b6000)
libpthread.so.0 => /lib/tls/libpthread.so.0 (0xb71a4000)
libc.so.6 => /lib/tls/libc.so.6 (0xb7072000)
libX11.so.6 => /usr/lib/libX11.so.6 (0xb6f86000)
libpangocairo-1.0.so.0 => /usr/lib/libpangocairo-1.0.so.0 (0xb6f7e000)
libcairo.so.2 => /usr/lib/libcairo.so.2 (0xb6f1c000)
libfontconfig.so.1 => /usr/lib/libfontconfig.so.1 (0xb6ef0000)
libXext.so.6 => /usr/lib/libXext.so.6 (0xb6ee2000)
libXrender.so.1 => /usr/lib/libXrender.so.1 (0xb6eda000)
libXinerama.so.1 => /usr/lib/libXinerama.so.1 (0xb6ed7000)
libXi.so.6 => /usr/lib/libXi.so.6 (0xb6ecf000)
libXrandr.so.2 => /usr/lib/libXrandr.so.2 (0xb6ecc000)
libXcursor.so.1 => /usr/lib/libXcursor.so.1 (0xb6ec2000)
libXfixes.so.3 => /usr/lib/libXfixes.so.3 (0xb6ebd000)
libpangoft2-1.0.so.0 => /usr/lib/libpangoft2-1.0.so.0 (0xb6e92000)
libXft.so.2 => /usr/lib/libXft.so.2 (0xb6e7f000)
librt.so.1 => /lib/tls/librt.so.1 (0xb6e77000)
/lib/ld-linux.so.2 (0xb7ef9000)
libCDCopy.so => /usr/lib/libCDCopy.so (0xb6de1000)
libXau.so.6 => /usr/lib/libXau.so.6 (0xb6dde000)
libXdmcp.so.6 => /usr/lib/libXdmcp.so.6 (0xb6dd9000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0xb6d6f000)
libz.so.1 => /usr/lib/libz.so.1 (0xb6d5b000)
libpng12.so.0 => /usr/lib/libpng12.so.0 (0xb6d37000)
libexpat.so.1 => /usr/lib/libexpat.so.1 (0xb6d17000)





Debian GNU/Linux https://www.debian.org/index.de.html
bei Antwort benachrichtigen