Distcc/Cross-Compiling/zh-cn

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

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

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

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

Intel x86 subarchitectures
如果你要在不同的intel x86子架构（例如i586和i686）上进行交叉编译，你仍然必须为目标CHOST编译完整的交叉工具链，否则编译会失败. 这是因为i586和i686实际上是不同的CHOST，尽管它们都被认为是“x86”. 当你建立交叉工具链的时候请谨记这一点. 例如，如果目标机器是i586，这意味着你必须在i686机器上建立i586的交叉编译链.

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

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

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

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

幸运的是，这一小问题有一个解决方案. 所需的只是在将要运行 的机器上添加一个封装脚本和几个符号链接. 我将使用我的Sparc机器作为例子. 在下面每处你看到 的地方，你需要替换成你自己的CHOST（例如对于AMD64的机器来说是 ）. 当你第一次安装完distcc的时候，看起来像这样：

这里你需要做：

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

The new wrapper script

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

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

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

这是如何工作的
When  is called, it checks to see what it was called as (e.g.  ,   , etc.) When distcc then distributes the compile to a helper box, it passes along the name it was called as. The distcc daemon on the other helper box then looks for a binary with that same name. If it sees just , it will look for   , which is likely to be the native compiler on the helper box, if it is not the same architecture as the box running. When the full name of the compiler is sent (e.g.  ), there is no confusion.

Acknowledgements
We would like to thank the following authors and editors for their contributions to this guide:


 * Andrew Gaffney
 * Joshua Saddler