Page 1 of 1

[DISTCC] client und server mit unterschiedlichem aktiven gcc

Posted: Thu Dec 18, 2014 11:10 am
by franzf
Ich stand gestern vor einer kleinen Herausforderung:
Da mein Laptop mit gcc-4.8.3 ziemliche Probleme beim Kompilieren bereitet (enormer Verbrauch an Speicher, so dass trotz 4GB RAM, MAKEOPTS=-j4 und kleiner (Paketabhängig), trotzdem häufiges Swappen vor allem in Kombination mit boost) und der gcc-4.9 das fixen soll, habe ich mich ans Update gesetzt. Da ich auf dem Server aber nicht den gcc-4.9 als Systemcompiler verwenden wollte stand ich vor der Frage, wie ich das hinbekomme.

Die Lösung ist eigentlich recht simpel:
Auf dem client Zwei Dateien anlegen:

Code: Select all

# cat /usr/local/bin/distcc-4.9.2
#!/bin/sh
/usr/bin/distcc gcc-4.9.2 "$@"

# cat /usr/local/bin/distcc-4.9.2++
#!/bin/sh
/usr/bin/distcc g++-4.9.2 "$@"
Dann noch entsprechend die Symlinks setzen:

Code: Select all

# for comp in /usr/lib64/distcc/bin/*c; do ln -snf /usr/local/bin/distcc-4.9.2 $comp; done

# for comp in /usr/lib64/distcc/bin/*++; do ln -snf /usr/local/bin/distcc-4.9.2++ $comp; done

# ls -l
insgesamt 0
lrwxrwxrwx 1 root root 29 18. Dez 12:02 c++ -> /usr/local/bin/distcc-4.9.2++
lrwxrwxrwx 1 root root 27 18. Dez 12:02 cc -> /usr/local/bin/distcc-4.9.2
lrwxrwxrwx 1 root root 29 18. Dez 12:02 g++ -> /usr/local/bin/distcc-4.9.2++
lrwxrwxrwx 1 root root 27 18. Dez 12:02 gcc -> /usr/local/bin/distcc-4.9.2
lrwxrwxrwx 1 root root 29 18. Dez 12:02 x86_64-pc-linux-gnu-c++ -> /usr/local/bin/distcc-4.9.2++
lrwxrwxrwx 1 root root 29 18. Dez 12:02 x86_64-pc-linux-gnu-g++ -> /usr/local/bin/distcc-4.9.2++
lrwxrwxrwx 1 root root 27 18. Dez 12:02 x86_64-pc-linux-gnu-gcc -> /usr/local/bin/distcc-4.9.2
Dann noch mit gcc-config auf den richtigen gcc schalten (auf dem client) und das wars :)

Die beiden distcc-Versionen für gcc ung g++ waren nötig, da scheinbar manche Flags unterschiedlich gesetzt werden. binutils scheiterte z.B. geich beim Linken des gold-linkers (viele undefined references in der STL, z.B. in std::basic_string und dem allocator).

Vielleicht gibt es eine bessere Lösung aber die war am schnellsten umgesetzt, und über Optionen in den config files war es nicht möglich, jedenfalls sah ich nichts :)