From Segfault
Jump to navigation Jump to search


On the distcc server, distccd must be run:

distccd --daemon --allow --allow --jobs 4

distccd can also be run via inetd:

$ grep distcc /etc/inetd.conf
distcc stream tcp nowait.6000 root /usr/bin/distccd distccd --inetd --allow --allow --jobs 4

The clients need to be configured, so that distcc can use their server:

$ cat /etc/distcc/hosts

Or, to set the distcc server temporarily:

export DISTCC_HOSTS='localhost'

Build something:

cd ~/some-project-source
make CC=distcc

Note: the server nodes need to provide the same compiler as the distcc client, otherwise the compile jobs might fail with something like this:

distccd[1762] (dcc_execvp) ERROR: failed to exec i686-pc-linux-gnu-gcc: No such file or directory

As a quick (and dirty) solution, a symlink could help:

ln -s /usr/bin/i486-linux-gnu-gcc /usr/bin/i686-pc-linux-gnu-gcc

Another way is to explicitly specify CC='gcc' and CXX='c++'. However, the only sane solution to this is to use the same compiler versions on all the computing nodes.


To use ccache, simply export the PATH variable to point to ccache wrappers for the compilers:

$ ls -lgo /usr/lib/ccache/bin/
lrwxrwxrwx 1 15 Jan 27 11:56 c++ -> /usr/bin/ccache
lrwxrwxrwx 1 15 Jan 27 11:56 cc -> /usr/bin/ccache
lrwxrwxrwx 1 15 Jan 27 11:56 g++ -> /usr/bin/ccache
lrwxrwxrwx 1 15 Jan 27 11:56 gcc -> /usr/bin/ccache
lrwxrwxrwx 1 15 Jan 27 11:56 i686-pc-linux-gnu-c++ -> /usr/bin/ccache
lrwxrwxrwx 1 15 Jan 27 11:56 i686-pc-linux-gnu-g++ -> /usr/bin/ccache
lrwxrwxrwx 1 15 Jan 27 11:56 i686-pc-linux-gnu-gcc -> /usr/bin/ccache
$ export PATH:/usr/lib/ccache/bin:$PATH

Now every call for e.g. "gcc" will be handled by "ccache". Some other helpful variables:

CCACHE_DIR="/var/tmp/ccache" ← cache directory
CCACHE_SIZE="2G"             ← 2 GB cache
CCACHE_COMPRESS=1            ← compress object files and compiler output

We could also specify the CC variable:

cd ~/some-project-source
make CC="ccache cc"

This way we can combine both distcc and ccache:

make CCACHE_PREFIX=distcc CC="ccache cc"

Display statistics:

$ CCACHE_DIR=/var/tmp/ccache ccache -s
files in cache                     79583
cache size                         645.4 Mbytes
max cache size                       2.0 Gbytes