Page 1 of 1

verschiedene GCC Versionen parallel betreiben

Posted: 31. May 2007 8:21
by kahnguhu
Salü,

ich verwende ein SuSE 10.1 welches GCC 4.1 installiert. Um die Toolchain für MSP430 kompilieren zu können, benötige ich einen GCC 3.4. Kann ich irgendein ein gcc-3.4-rpm (in meinem Falle eines von Mandrake) installieren? Ich habs mal mit der rpm-Option --test versucht; dies bringt nicht unerwartet die Meldung, dass das Paket mit gcc-4.1.rpm in Konflikt steht.

Wie kann ich 2 Kompiler-Versionen parallel betreiben? Ist der Weg über's rpm falsch?

Danke vielmals!

kahnguhu

Posted: 31. May 2007 11:01
by Janka
Zwei Programm-Versionen kannst du nur parallel betreiben, wenn du eine davon selbst kompilierst und bspw. nach /usr/local installierst *oder* eine der beiden Versionen in einem chroot-Käfig betreibst.

Wenn es sich nur um einzelne Anwendungen handelt, ist der erste Weg meist besser. Da der gcc aber auch noch einen Haufen Abhängigkeiten auf die C-Libraries mitbringt, halte ich den chroot in diesem Falle für geeigneter.

Janka

Posted: 31. May 2007 11:50
by kahnguhu
Vielen Dank für Deine Antwort!

Wie muss ich mir die chroot-Lösung vorstellen? Ich kenne dies z.B. von der Gentoo-Installation: Hier wird irgendwann mal vom Root-FS auf der CD zum Root-FS auf der HD "umgeschaltet". Ich möchte aber wirklich nur den gcc paralell haben, sonst nix. Wieso hältst Du dies für die einfachere Lösung?

Posted: 31. May 2007 13:18
by Janka
Es ist deshalb einfacher, weil die von dir mit dem gcc3 erstellten Programme auch die passenden Libraries benötigen. Der gcc3 muss diese an der selben Stelle finden wie nachher im Zielsystem. Ohne chroot müsstest du am dynamischen Linker herumschrauben und deine Makefiles für einen Test deiner Software jeweils anpassen.

Der chroot ist zwar nicht einfacher einzurichten, erfordert im Betrieb aber weniger Aufmerksamkeit und beeinflusst vor allem das restliche System nicht.

Mach dir erst einmal eine Liste aller Pakete, die du für den chroot benötigst. Das ist das Grundsystem, und die Entwicklerwerkzeuge. Die RPM-Dateien dafür in ein Verzeichnis packen.

Dann machst du dir ein Verzeichnis, in dem der chroot-Käfig liegen soll, und installierst dort hinein die Pakete.

Code: Select all

$ mkdir -p /home/kahnguhu/mychroot/var/lib/rpm
$ rpm --root /home/kahnguhu/mychroot --initdb
$ rpm --root /home/kahnguhu/mychroot --nodeps -i Pakete/*.rpm
Um Platz zu sparen kannst du natürlich auch einen Teil der Pakete durch Hardlinks auf die dadurch installierten Dateien ersetzen. Allerdings ist das komplizierter und es gibt evtl. Wechselwirkungen mit dem Grundsystem.

Janka

Posted: 31. May 2007 13:48
by kahnguhu
Ui, klingt nach ziemlichem Aufwand:-)

Andere Idee: Ist es möglich, den Inhalt einer älteren Live-CD mit dem entsprechenden Compiler in das ~/chroot Verzeichnis zu kopieren (wird warscheinlich zu viel dabei sein). Ebenfalls die Sourcen des Crosscompilers.
Danach ins Chroot wechseln, den Crosscompiler kompilieren, aus dem Chroot zurück wechseln und Crosscompiler installieren.

Was ist Deine Meinung dazu?

Posted: 01. Jun 2007 9:40
by Janka
Der größte Aufwand ist die Erstellung der Paketliste. Du kannst natürlich auch eine ganz andere Distribution (Live-CD) in einen chroot packen. Für wesentlich einfacher, als eine Paketliste zu erstellen halte ich dies aber nicht.

Du kannst ja auch unter yast->Software->Installation in ein Verzeichnis das openSuSE-Grundsystem als Selektion benutzen und dir ein Grundsystem von YaST erstellen lassen.

Janka

Posted: 04. Jun 2007 13:46
by kahnguhu
Ich habs mir nun relativ einfach gemach (kurz rumgespielt bevor ich das CHROOT angehen wollte) und es hat funktioniert:
Die GCC Version 3.4.6 gezogen, in ein Verzeichnis

Code: Select all

/home/kahnguhu/gcc 
mit dem Postfix -3.4 im Home installiert. Danach Verzeichnis mit

Code: Select all

export PATH=$PATH:/home/kahnguhu/gcc/bin
bekannt gemacht und vor der Kompilation gemäss http://www.mikrocontroller.net/articles/MSPGCC den Kompiler mit

Code: Select all

export CC=gcc-3.4
"umgebogen".

Weshalb ich kein CHROOT benötigte weiss ich nun aber nicht... :-)

Danke für Deine Hilfe!

Posted: 04. Jun 2007 14:56
by Janka
Offensichtlich sind die Makefiles des MSPGCC schon für diese Situation eingrichtet.

Janka