Mehrere gcc-Versionen, was ist mit den Libraries?

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
hym
Beiträge: 5
Registriert: 19.04.2007 17:11:37

Mehrere gcc-Versionen, was ist mit den Libraries?

Beitrag von hym » 19.04.2007 17:58:04

Hi,

ich habe mal ne grundsätzliche Frage bezüglich paralleler gcc-Versionen, die Suche konnte mir hier leider nicht weiterhelfen.

Ich habe hier einen Server mit Etch, brauche aber aufgrund einer bestimmten Library einen gcc 3.4.4. Ich weiß, daß parallele Installationen möglich sind und grob weiß ich auch, wie man das macht.
(configure --enable-version-specific-runtime-libs --prefix=/usr/local/gcc-3.4.4)

Einige Verständnisprobleme hab ich aber dennoch:

1. Woher weiß der Compiler, welche libstdc++ z.B. er nehmen soll?
In /usr/lib liegt derzeit eine libstdc++.so.6.0.8, der gcc-3.4.4 hat bei der Installation eine libstdc++.so.6.0.3 erzeugt, die jetzt unter /usr/local/gcc-3.4.4/lib/ liegt. Wenn ich jezt den 3.4.4 verwende, benutzt er dann automatisch "seine" lib?

2. Was ist mit anderen Libs?
Ich benutze z.B. die libz, müßte ich die nicht auch mit dem 3.4.4er compilieren, damit das funzt?

Danke und Gruß,

hym

p.s.: ich hab schon mal eine Installation durch "Link-Umbiegen" der Libraries total zerschossen. Das muß nicht nochmal sein :wink:

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

Re: Mehrere gcc-Versionen, was ist mit den Libraries?

Beitrag von gms » 19.04.2007 18:30:48

Willkommen im Forum!
hym hat geschrieben:1. Woher weiß der Compiler, welche libstdc++ z.B. er nehmen soll?
In /usr/lib liegt derzeit eine libstdc++.so.6.0.8, der gcc-3.4.4 hat bei der Installation eine libstdc++.so.6.0.3 erzeugt, die jetzt unter /usr/local/gcc-3.4.4/lib/ liegt. Wenn ich jezt den 3.4.4 verwende, benutzt er dann automatisch "seine" lib?
ja, beim Link-Step gibt der gcc(g++) seine eigenen Libraries an
hym hat geschrieben:2. Was ist mit anderen Libs?
Ich benutze z.B. die libz, müßte ich die nicht auch mit dem 3.4.4er compilieren, damit das funzt?
Die libz ist keine C++ Library, daher ist das eigentlich jetzt nicht das beste Beispiel
Die libz Version mit der gelinkt wird, wird entweder über das installierte "-dev" Paket bestimmt, genauer gesagt durch den Link der von diesen Paketen erzeugt wird

Code: Alles auswählen

gms@debi:~$ ls -l /usr/lib/libz.so
lrwxrwxrwx 1 root root 9 2007-03-13 20:41 /usr/lib/libz.so -> libz.so.1
oder du mußt entsprechend selber herumfrickeln, den entsprechenden Link setzen und sicherstellen, daß auch die zugehörigen Header-Dateien für die Kompilierung herangezogen werden

Hättest du jetzt eine C++ Library als Beispiel genommen, dann wird im allgemeinen empfohlen, daß die ABI's nicht gemixt werden. Daher solltest du auch eine Neukompilierung der Library in Betracht ziehen.
hym hat geschrieben: p.s.: ich hab schon mal eine Installation durch "Link-Umbiegen" der Libraries total zerschossen. Das muß nicht nochmal sein :wink:
das kommt darauf an, welchen Link du umgebogen hast, obiger Link ist da völlig ungefährlich, der ist für die Ausführung der Programme nicht relevant, dort wird die versionierte Library herangezogen

Code: Alles auswählen

gms@debi:~$ ldd /usr/bin/dar | grep libz
        libz.so.1 => /usr/lib/libz.so.1 (0xb7c44000)
meistens und auch hier verbirgt sich aber unter "libz.so.1" auch wiederum ein Link und den umzubiegen, kann durchaus zu gröberen Problemen führen

Code: Alles auswählen

gms@debi:~$ ls -l /usr/lib/libz.so.1
lrwxrwxrwx 1 root root 13 2007-03-12 17:50 /usr/lib/libz.so.1 -> libz.so.1.2.3
Gruß
gms

[edit]
Ich habe dir hier auch noch den Link zu "C++ Standard Library ABI" herausgesucht:
http://gcc.gnu.org/onlinedocs/libstdc++/abi.html

wenn du nicht zu sehr ins Detail gehen möchtest, für dich wird es hauptsächlich unter "Testing Multi-ABI binaries" und vorallem "Outstanding Issues" interessant
[/edit]

hym
Beiträge: 5
Registriert: 19.04.2007 17:11:37

Beitrag von hym » 20.04.2007 16:40:00

Super, danke!

You made my day!

Gruß,

hym

Antworten