franzf Advocate
Joined: 29 Mar 2005 Posts: 4565
|
Posted: Thu Dec 18, 2014 11:10 am Post subject: [DISTCC] client und server mit unterschiedlichem aktiven gcc |
|
|
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: | # 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: | # 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 |
|