如何安装distcc?


10

我已经阅读了如何构建用于交叉编译的GCC 4.7工具链?并成功构建了适用于我的RPi的简单测试程序。

为此,我必须arm-unknown-linux-gnueabi-gcc hello.c -o hello在x86桌面和scpRPi的可执行文件上运行。这很慢,很麻烦。我宁愿从我的RPi控制编译。

我已经读过有关的文章distcc,该文章可用于将编译内容从一台计算机分发到另一台计算机。

我该如何安装?我同时拥有Debian / Ubuntu和Arch Linux桌面,并且两个操作系统都安装在SD卡上。


我一直在等待不是我的人发这个问题。我真的不想这么做。辛苦了
吉文斯2012年

export DISTCC_VERBOSE=1谢谢你!这就是我想要调试distcc工具链的问题

Answers:


12

这些说明假定您在从站上有一个可以正常工作的交叉编译器。请阅读如何构建GCC 4.7工具链进行交叉编译?如果还没有。make安装在主服务器上也很有用。

安装

首先,我们必须安装distcc。我们将使用操作系统的程序包管理系统提供的预编译程序包,但如果需要,您可以自由从源代码进行安装!

德比安

sudo apt-get install distcc

sudo pacman -S distcc

组态

奴隶-Debian / Ubuntu

TODO:Arch也是这样吗?如果没有,我们如何配置Arch?

我们需要调整中的设置/etc/default/distcc。在您喜欢的编辑器中,以根用户身份打开它;我跑了sudo vim /etc/default/distcc

您需要更改STARTDISTCCALLOWEDNETS并且LISTENER。假设您的主服务器和从服务器位于同一子网中,并且该子网位于192.168.0.0/24,则应将它们设置为

STARTDISTCC="true"
ALLOWEDNETS="192.168.0.0/24"
LISTENER="0.0.0.0"

此外,您应该将路径添加到编译器。我通过添加以下行来做到这一点

PATH=$PATH:/home/alex/x-tools/arm-unknown-linux-gnueabi/bin

注意从属服务器上的守护程序将以distccd用户身份运行,因此请确保在可执行文件上配置了适当的权限。我允许所有人执行。

运行以下守护程序-通常在启动时启动该守护程序

sudo service distcc start

大师-拱门

TODO:Debian也一样吗?如果没有,我们如何配置Debian?

~/.distcc/hosts在您喜欢的文本编辑器中打开并添加从站的IP地址。我的hosts文件只有一行,显示为192.168.0.22

注意为您的从站分配一个静态IP地址可能是一个好主意,否则,只要IP地址更改,就必须更改此文件。

采用

一切顺利,您应该能够非常简单地使用distcc。例如,编译hello.chello.o,运行

distcc arm-unknown-linux-gnueabi-gcc    -c -o hello.o hello.c

示例:世界您好!

我在主目录中设置了一个简单的示例,该示例包含2个文件。

# file: Makefile
hello.o: hello.c
hello: hello.o

# file: hello.c
#include <stdio.h>

int main() {
  printf("Hello World!\n");
  return 0;
}

运行make hello将在本地编译;您应该首先将其作为快速测试。继续,我等。

运行make hello CC="distcc arm-unknown-linux-gnueabi-gcc"将运行分布式编译。

注意预处理和链接仍在RPi上进行。

调试

我花了一些时间才能正常工作,而我发现最好的调试工具是一个简单的环境变量。如果你

export DISTCC_VERBOSE=1

distcc有用的信息客户端将输出负载。

这是一篇很长的文章,所以将不胜感激收到任何反馈。我希望我记得所有步骤!


极好的答案。我将为我的RPi开发添加书签。
Jivings 2012年

@AlexChamberlain Distcc现在支持“泵模式”,这也使其可以分发预处理。
teraquendya,2012年

@teraquendya实际上,我还没有发布有关此操作的详细信息。我想确保在没有泵模式的情况下我一切都正确。
Alex Chamberlain 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.