Distcc/Cross-Compiling/zh-cn

本文向你展示如何配置distcc在不同的处理器架构之间进行交叉编译.

介绍
是一个工具，能让你在网络中的多台机器共同编译软件. 只要在网络中的机器使用相同的工具链为相同的处理器架构编译，就不需要特殊的 配置. 但是如果你想用不同的机器为不同的架构进行编译呢？这篇指南将向你展示如何配置 来为不同的架构进行编译.

安装必要的工具
首先，你需要在所有的参与编译的机器上安装. 是一个能够让简化跨架构工具链编译的工具. 最初由Joshua Kinard编写，后来Mike Frysinger进行了完全的重写. 它的使用非常的直观： 将为Sparc架构编译完整的交叉工具链. 这包含binutils，gcc，glibc和linux-headers. 如果你需要帮助，尝试运行. 很明显，你要要在所有帮助编译的机器上安装合适的交叉工具链.

If you want to fine tune the cross-toolchain, here is a script that will produce a command line with the exact versions of the cross development packages to be built on the helper boxes (the script is to be run on the target box).

Script to fine-tune cross development tools

然后，你需要在所有参与交叉编译的机器上安装. 这些机器包括将运行emerge的机器和进行交叉编译的机器. 更多的关于配置和使用 的信息请参考Gentoo Distcc Documentation.

Intel x86 subarchitectures
If you are cross-compiling between different subarchitectures for Intel x86 (e.g. i586 and i686), you must still build a full cross-toolchain for the desired CHOST, or else the compilation will fail. This is because i586 and i686 are actually different CHOSTs, despite the fact that they are both considered "x86." Please keep this in mind when you build your cross-toolchains. For example, if the target box is i586, this means that you must build i586 cross-toolchains on your i686 helper boxes.

SPARC
使用 也许会失败，伴随如下错误：

运行crossdev -t sparc时出现的错误

如果发生上述错误，尝试使用下面的命令：

配置distcc以便正确的交叉编译
使用默认的distcc配置，交叉编译“不”会正常工作. 这是因为很多编译仅仅调用 而不是编译器的全名（例如 ）. 当这一编译被分发到帮助交叉编译的机器上时，原生的编译器被调用，而非你新安装的交叉编译器.

Fortunately, there is a workaround for this little problem. All it takes is a wrapper script and a few symlinks on the box that will be running. We'll use a Sparc box as an example. Wherever you see  below, you will want to insert your own CHOST (  for an AMD64 box, for example). When you first emerge distcc, the directory looks like this:

这里你需要做：

然后，你要在这台机器上创建一个新的脚本. 打开你喜欢的文本编辑器，创建一个文件，内容如下. 然后保存到. 记住替换CHOST（这里是 ）成你要运行emerge的机器的实际的CHOST.

The new wrapper script

接下来，将此脚本设置为可执行，并创建适当的符号链接：

当你完成以后，看起来像这样：

Next we want to make sure that these wrappers stay available after upgrading the distcc package as it will overwrite the symbolic links. We can do this through a file that looks like so:

/etc/portage/bashrc

恭喜，你已经有一个可以工作的distcc配置了（希望如此）.

这是如何工作的
当 被调用的时候，它会检查自己是以何种方式被调用的（例如 ， 等等）. 当distcc把编译工作分发到帮助交叉编译的机器上的时候，它会把调用方式一起分发. 在帮助交叉编译的机器上，distcc的守护进程会去寻找有相同名字的程序. 如果它看到的仅仅是 ，它就会去找 ，如果帮助交叉编译的机器架构跟运行 的机器不一致，distcc的守护进程找到的gcc很可能是这台机器上的原生的的编译器. 如果发送的是编译器的“全名”（例如 ），就不会出现混淆.

感谢
感谢下面的作者和编辑对这篇指南的贡献：


 * Andrew Gaffney
 * Joshua Saddler