Cross compilation means building programs to run on a machine with a different processor, architecture, or operating system to where they were compiled. distcc supports cross compilation, including teams of mixed-architecture machines, although some changes to the compilation commands may be required.
The compilation command passed to distcc must be one that
will execute properly on every volunteer machine to produce
an object file of the appropriate type. If the machines
have different processors, then simply using distcc
cc
will probably not work, because that will
normally invoke the volunteer's native compiler.
Machines with the same instruction set but different operating systems may not necessarily generate compatible .o files. Empirically it seems that the native FreeBSD compiler generates object files compatible with Linux for C programs, but not for C++. It may be a good idea to install a Linux cross compiler on BSD volunteers.
Different versions of the compiler may generate incompatible
object files. This seems to be much more of a problem with
C++ than with C, because the C++ ABI (application binary
interface) has changed in recent years. If you will be
building C++ programs, it may be a good idea to install the
same version of g++
on all machines.
Several different gcc configurations can be installed
side-by-side on any machine. If you build gcc from source,
you should use the --program-suffix
configuration
options to cause it to be installed with a name that encodes
the gcc version and the target platform.
The recommended convention for the gcc name is
target-gcc-
version, such as
i686-linux-gcc-3.2
. GCC 3.3 will install itself
under this name, in addition to target-gcc
and, if it's native, gcc-
version and
gcc
.
The compiler must be installed under the same name on the client and on every volunteer machine.
gcc also has -b
and -V
options to specify
a target and version, but at the moment the gcc team
recommend using a qualified compiler name instead.
For more information on cross-compiling, see Specifying Target Machine and Compiler Version in the gcc manual, and the gcc installation guide.