[DISTCC] client und server mit unterschiedlichem aktiven gcc
Posted: Thu Dec 18, 2014 11:10 am
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:
Dann noch entsprechend die Symlinks setzen:
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
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 "$@"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.2Die 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