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
使用 也许会失败，伴随如下错误：

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

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

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

这里你需要做：

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

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

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

然后我们要确保这些封装脚本在升级distcc包之后不会被替换成之前的符号链接. 我们可以提通过在中添加下面的 代码来实现：

Congratulations; you (hopefully) now have a working cross-distcc setup.

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