PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zwei Versionen von libgcc



johnpatcher
21.09.09, 15:43
Hi,

ich möchte auf meinem Server, auf dem Arch Linux läuft, gerne einen Teamspeak Server einrichten. Das haut auch soweit hin, jedoch ist Teamspeak ja bekanntlich nur als Binary erhältlich, und ist somit nicht gerade anpassbar.

Jedenfalls läuft der Teamspeak nur mit einer alten Version von libgcc, bei der eigentlich auf meinem System installierten Version lässt sich der Server nicht starten und bricht mit folgender Fehlermeldung ab:

libgcc_s.so.1 must be installed for pthread_cancel to work

Nun habe ich eine ältere Version der Library organisiert und wenn ich diese mit der eigentlich Version ersetze, dann läuft der Teamspeak Server auch einwandfrei, jedoch gibt es einige andere Programme, die das nicht mitmachen :(.

Nun wollte ich fragen, ob es möglich ist, Teamspeak mit dieser älteren Version laufen zu lassen. Unter Windows z.B. ist es ja (oft) möglich die entsprechende Library einfach nur ins Programmverzeichnis zu kopieren, unter Linux scheint dies nicht zu funktionieren.

Gibt es hier irgendwelche Möglichkeiten nur dem Teamspeak Server die alte Version von llibgcc_s.so.1 unterzujubbeln? Oder bleibt hier nur die Option einer chroot Umgebung? Würde mir das Ganze eigentlich gerne ersparen, wegen eines Programms ein chroot zu erstellen.

Hätte gerne die Suchfunktion benutzt, allerdings fehlen mir hier ein wenig die Stichwörter ;).

Mit freundlichen Grüßen

Rain_maker
21.09.09, 15:54
Gibt es hier irgendwelche Möglichkeiten nur dem Teamspeak Server die alte Version von llibgcc_s.so.1 unterzujubbeln? O

Du suchst vermutlich "LD_PRELOAD" und/oder "LD_LIBRARY_PATH".

//edit:

Was mich aber wundert, warum das nicht mit der mitgelieferten libgcc_s.so.1 funktioniert.

Laut Archlinux.de liegt das Paket "gcc-libs" in Version 4.4.1 vor (und hängt von glibc 2.10.1 ab), genau die selben Versionen wie in openSUSE-Factory (= baldige 11.2) und da kann ich den Teamspeakserver ("./server_linux --version" sagt mir "Version TeamSpeak v2.0.24.1") ohne Probleme starten (sowohl auf i586 als auch auf x86_64).

Daß es sich bei dem Server um ein 32 Bit binary handelt, ist Dir bekannt?

Nicht, daß es daran liegt und einfach nur die entsprechenden 32 Bit Bibliotheken fehlen -bei SUSI wäre das libgcc44-32bit, wie der Kram bei Arch heisst, weiß ich nicht- weil die Kiste selbst auf 64 Bit läuft.

Multilibs sind auf Arch noch nicht so weit verbreitet wie auf anderen Distros, falls es da keine gibt (was ich mir bei dieser zentralen Bibliothek eigentlich weniger vorstellen kann), läuft es dann natürlich auf "von Hand zurechtfrickeln" hinaus (siehe dazu den ersten Abschnitt meiner Antwort).

johnpatcher
21.09.09, 17:51
Naja, es hat schon durchaus etwas mit der Problematik von 64-bit zu tun :(.

Mein System läuft auf Basis von 64-bit Bibliotheken, welche der TS Server scheinbar nicht frisst, da er ja bekanntlich nur für 32-bit ausgelegt ist. Laut Packet-Info ist die Version aber auch für 64-bit Installationen, da dann entsprechend lib32-glibc installiert wird. Scheinbar ist aber die lib32-glibc Bibliothek zu neu, zumindest geht es nicht, obwohl es vor dem Update von lib32-glibc wohl funktioniert haben muss. Leider bin ich mir ansonsten nicht ganz sicher, was ich sonst noch installieren soll :(.

Rain_maker
21.09.09, 17:55
Scheinbar ist aber die lib32-glibc Bibliothek zu neu, .

Nein, offensichtlich nicht, sonst würde es hier nicht mit den exakt selben Version von libgcc44-32bit und glibc-32bit funktionieren.



arch
x86_64

rpm -q libgcc44-32bit glibc-32bit
libgcc44-32bit-4.4.1_20090817-1.14.x86_64
glibc-32bit-2.10.1-7.3.x86_64

./teamspeak2-server_startscript start
starting the teamspeak2 server
TeamSpeak Server Daemon started with PID 2283

netstat -tulpen
Aktive Internetverbindungen (Nur Server)
Proto Recv-Q Send-Q Local Address Foreign Address State Benutzer Inode PI
D/Program name
tcp 0 0 0.0.0.0:51234 0.0.0.0:* LISTEN 1000 8085 22
83/server_linux
tcp 0 0 0.0.0.0:14534 0.0.0.0:* LISTEN 1000 8084 22
83/server_linux
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 0 7216 -

udp 0 0 0.0.0.0:5353 0.0.0.0:* 104 5774 -

udp 0 0 0.0.0.0:8767 0.0.0.0:* 1000 8052 22
83/server_linux
udp 0 0 0.0.0.0:36682 0.0.0.0:* 104 5775 -


Lösungsansätze habe ich Dir ja schon genannt.

johnpatcher
21.09.09, 18:01
Ok, danke für den Tipp mit gcc-libs ;). Bei Arch heißt das Paket "lib32-gcc-libs" und nach der Installation funktioniert der TS Server.

Ein wenig verwunderlich ist das aber, immerhin dachte ich, dass die gcc-libs nur von Nöten sind, wenn ich etwas kompilieren möchte, und da der Server schon als Binary vorliegt, hätte ich nicht gedacht, dass man das noch installieren muss.

So, oder so, als Dependency sollte man es wohl eintragen, worum ich mich kümmern werde.

Vielen Dank.

Rain_maker
21.09.09, 18:05
Ein wenig verwunderlich ist das aber, immerhin dachte ich, dass die gcc-libs nur von Nöten sind, wenn ich etwas kompilieren möchte, und da der Server schon als Binary vorliegt, hätte ich nicht gedacht, dass man das noch installieren muss.


Dem ist aber nicht so:


rpm -qi libgcc44
Name : libgcc44 Relocations: (not relocatable)
Version : 4.4.1_20090817 Vendor: openSUSE
Release : 1.14 Build Date: Fr 11 Sep 2009 00:41:29 CEST
Install Date: Mi 16 Sep 2009 15:25:54 CEST Build Host: build27
Group : System/Base Source RPM: gcc44-4.4.1_20090817-1.14.src.rpm
Size : 92648 License: GPL v3 or later
Signature : RSA/8, Fr 11 Sep 2009 00:46:32 CEST, Key ID b88b2fd43dbdc284
Packager : http://bugs.opensuse.org
URL : http://gcc.gnu.org/
Summary : C compiler runtime library
Description :
Libgcc is needed for dynamically linked C programs.
Distribution: openSUSE FactoryUnd das dürften ne ganze Menge sein, wobei da wahrscheinlich noch "compiled with gcc" fehlt, aber auch da dürfte es unter Linux nur sehr wenige Ausnahmen geben, falls überhaupt.

johnpatcher
21.09.09, 18:11
Naja, gut zu wissen, da habe ich es mit dem Minimalismus wohl ein wenig zu ernst genommen, dennoch vielen Dank für den Tipp, das wäre ich wohl nicht drauf gekommen.