32bit programme auf 64bit systemen

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
kartoffel
Beiträge: 34
Registriert: 08.03.2005 21:24:25
Kontaktdaten:

32bit programme auf 64bit systemen

Beitrag von kartoffel » 06.12.2005 13:21:17

Hallo,
ich habe ein debian Woody und möchte gerne einen teamspeak server darauf installieren.
Das dumme ist das der Server nur als binary für 32bit Systeme zu haben ist und ich ein64bit System habe. Habe gelesen das man mit den lib32 libs problemlos 32bit Software auf 64bit zum laufen bekommen kann. Habe dann auch diese beiden libs installiert:

lib32gcc1 - GCC support library (ia32)
lib32stdc++6 - The GNU Standard C++ Library v3 (ia32)

Die große Frage ist wie benutze ich diese, also wie teile ich mit das ein Programm das ich startein 32 bit Prog ist und diese libs nutzen soll.
Danke
Kartoffel

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 06.12.2005 13:39:38

kartoffel hat geschrieben:Die große Frage ist wie benutze ich diese, also wie teile ich mit das ein Programm das ich startein 32 bit Prog ist und diese libs nutzen soll.
32 bit Programme kannst du ganz normal starten. Der Dynamic Linker kümmert sich um dem Rest. Falls dieser die entsprechenden Libraries nicht finden sollte, kannst du mit ldconfig bzw. der Environmentvariable LD_LIBRARY_PATH nachhelfen. Das ist aber eigentlich kein biarch-spezifischer Task.

Gruß
gms

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 06.12.2005 13:48:46

@kartoffel
und BTW - Woody ist oldstable :idea: - bist du dir sicher das du Woody hast und nicht Sarge oder Etch bzw. SID?

markus

kartoffel
Beiträge: 34
Registriert: 08.03.2005 21:24:25
Kontaktdaten:

Beitrag von kartoffel » 07.12.2005 12:39:09

Falls dieser die entsprechenden Libraries nicht finden sollte, kannst du mit ldconfig bzw. der Environmentvariable LD_LIBRARY_PATH nachhelfen.
Das scheint der Fall zu sein zumindest startet das Pogramm genauso wenig wie vorher. Mir ist nicht ganz klar wie ich das mit ldconfig umgehen kann.
Ich habe mal das hier probiert:

Code: Alles auswählen

ldconfig -n /usr/lib32/
Hat jedoch auch nicht weitergeholfen, die Fehlermeldung die ich bekomme wenn ich den Server starten will ist diese hier:

Code: Alles auswählen

 ./server_linux: cannot execute binary file
und BTW - Woody ist oldstable Idea - bist du dir sicher das du Woody hast und nicht Sarge oder Etch bzw. SID?
Sorry, ist ein Sarge[/code]

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 07.12.2005 13:30:02

mit "ldd <program>" wird dir angezeigt, welche Libraries gefunden werden und welche Libraries nicht gefunden werden.

Gruß
gms

kartoffel
Beiträge: 34
Registriert: 08.03.2005 21:24:25
Kontaktdaten:

Beitrag von kartoffel » 07.12.2005 14:38:29

Das gibt folgendes zurück:

Code: Alles auswählen

ldd server_linux
/usr/bin/ldd: line 95: /usr/bin/lddlibc4: cannot execute binary file
        not a dynamic executable

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 07.12.2005 19:39:30

kannst du einmal das File /usr/bin/ldd öffnen und dort nach lddlibc4 suchen. Wenn meine Vermutung richtig ist, sollte dieses in einer Funktion "noelf" zu finden sein, und nur dort. Weiters, gibt es wahrscheinlich auf deinem System auch keind /usr/bin/lddlibc4 Datei.

Diese Bug kannst du beheben, indem du diese Funktion umschreibst:

Code: Alles auswählen

nonelf ()
{
  # Maybe extra code for non-ELF binaries.
  return 1;
}
Aber eigentlich ist das nicht wirklich unser Problem. Ich kenne den Timespeak Server zwar nicht, aber ich vermute, daß es sich bei "server_linux" um ein Script handelt, über welches das eigentliche Binary gestartet wird.
Das könntest du auch einmal überprüfen und danach nochmals "ldd <program>" mit dem richtigen Programm aufrufen

Gruß
gms

kartoffel
Beiträge: 34
Registriert: 08.03.2005 21:24:25
Kontaktdaten:

Beitrag von kartoffel » 07.12.2005 21:52:42

server_linux ist die binary die soll aber normalerweise übern script gestartet werden.
/usr/bin/lddlibc4 gibt es!
Also wenn ich das richtig verstehe soll die funktion nonelf immer false zurück geben und sonst nix oder was?
Ich probier das jetzt mal aus und wenn ihr nix mehr hört hat es funktioniert ;)

kartoffel
Beiträge: 34
Registriert: 08.03.2005 21:24:25
Kontaktdaten:

Beitrag von kartoffel » 07.12.2005 21:58:18

also ich habe bei der funktion jetzt alles auskommentiert bis auf

Code: Alles auswählen

return 1;
funktioniert jedoch trotzdem nicht. Oder soll die Funktion immer true zurück geben?
ach ich probiers einfach mal....

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 07.12.2005 22:22:21

kartoffel hat geschrieben: /usr/bin/lddlibc4 gibt es!
rein interessehalber, ist dieses Programm ausführbar ?

Hast du das Programm readelf, versuche einmal "readelf -h server_linux", ansosnten versuche "file server_linux"

Was für ein 64 bit System hast du eigentlich laufen ?

Gruß
gms

kartoffel
Beiträge: 34
Registriert: 08.03.2005 21:24:25
Kontaktdaten:

Beitrag von kartoffel » 08.12.2005 11:08:01

rein interessehalber, ist dieses Programm ausführbar ?
Nein, es kommt wieder ein cannot execute binary file.

Code: Alles auswählen

readelf -h server_linux
gibt das hier zurück:

Code: Alles auswählen

ELF Header:
  Magic:   7f 45 4c 46 01 01 01 00 00 00 00 00 00 00 00 00
  Class:                             ELF32
  Data:                              2's complement, little endian
  Version:                           1 (current)
  OS/ABI:                            UNIX - System V
  ABI Version:                       0
  Type:                              EXEC (Executable file)
  Machine:                           Intel 80386
  Version:                           0x1
  Entry point address:               0x8053610
  Start of program headers:          52 (bytes into file)
  Start of section headers:          940616 (bytes into file)
  Flags:                             0x0
  Size of this header:               52 (bytes)
  Size of program headers:           32 (bytes)
  Number of program headers:         5
  Size of section headers:           40 (bytes)
  Number of section headers:         21
  Section header string table index: 20
Und

Code: Alles auswählen

file server_linux
server_linux: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared libs), stripped
Was für ein 64 bit System hast du eigentlich laufen ?
Meinst du die cpu? das ist nen opteron.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 08.12.2005 15:27:20

Vermutlich fehlt dir irgendwas, du könntest dir einmal den gcc-3.4 installieren, das hat zum Beispiel hier http://www.debianforum.de/forum/viewtop ... highlight=
ganz gut funktioniert

Gruß
gms

kartoffel
Beiträge: 34
Registriert: 08.03.2005 21:24:25
Kontaktdaten:

Beitrag von kartoffel » 08.12.2005 16:10:36

gcc und g++ habe ich installiert es bleibt jedoch beim alten.
Ich frage mich auch welchen nutzen das haben soll wenn ich den quellcode nicht habe und somit das programm garnicht selber kompilieren kann.
verflucht das ist doch zum mäusemelken.

gms
Beiträge: 7798
Registriert: 26.11.2004 20:08:38
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von gms » 08.12.2005 16:30:12

kartoffel hat geschrieben:gcc und g++ habe ich installiert es bleibt jedoch beim alten.
Ich frage mich auch welchen nutzen das haben soll wenn ich den quellcode nicht habe und somit das programm garnicht selber kompilieren kann.
verflucht das ist doch zum mäusemelken.
Der Standard gcc (3.3) ist nur für reinen 64 bit Code erstellt worden, daher werden bei diesem die benötigten 32 bit Libraries auch nicht installiert. Daher solltest du einmal ein "apt-get instal gcc-3.4" ausführen. Den Compiler selber kannst du ja danach wieder entfernen.

Gruß
gms

kartoffel
Beiträge: 34
Registriert: 08.03.2005 21:24:25
Kontaktdaten:

Beitrag von kartoffel » 08.12.2005 16:57:32

ja das hatte ich getan...

Antworten