Diese Anweisungen setzen voraus, dass Sie einen funktionierenden Cross-Compiler auf dem Slave haben. Lesen Sie Wie erstelle ich eine GCC 4.7-Toolchain für das Cross-Compilieren? wenn nicht. Es ist auch nützlich, make
auf dem Master installiert zu haben .
Installation
Zuerst müssen wir installieren distcc
. Wir werden die vorgefertigten Pakete verwenden, die von den Paketverwaltungssystemen der Betriebssysteme geliefert werden. Sie können sie jedoch auch von der Quelle installieren, wenn Sie möchten!
Debian
sudo apt-get install distcc
Bogen
sudo pacman -S distcc
Aufbau
Sklave - Debian / Ubuntu
TODO: Ist das bei Arch auch so? Wenn nicht, wie konfigurieren wir Arch?
Wir müssen die Einstellungen in anpassen /etc/default/distcc
. Öffnen Sie es in Ihrem Lieblingseditor als root. Ich rannte sudo vim /etc/default/distcc
.
Sie müssen sich ändern STARTDISTCC
, ALLOWEDNETS
und LISTENER
. Angenommen, Ihr Master und Ihr Slave befinden sich im selben Subnetz und dieses Subnetz befindet 192.168.0.0/24
sich auf
STARTDISTCC="true"
ALLOWEDNETS="192.168.0.0/24"
LISTENER="0.0.0.0"
Außerdem sollten Sie den Pfad zu Ihrem Compiler hinzufügen. Ich habe dazu die folgende Zeile hinzugefügt
PATH=$PATH:/home/alex/x-tools/arm-unknown-linux-gnueabi/bin
Hinweis Der Daemon auf dem Slave wird als distccd
Benutzer ausgeführt. Stellen Sie daher sicher, dass die entsprechenden Berechtigungen für Ihre ausführbaren Dateien konfiguriert sind. Ich gab jedem die Erlaubnis zur Ausführung.
Führen Sie den Daemon aus - er wird normalerweise beim Booten gestartet -, indem Sie ihn ausführen
sudo service distcc start
Meister - Bogen
TODO: Ist das bei Debian auch so? Wenn nicht, wie konfigurieren wir Debian?
Öffnen Sie ~/.distcc/hosts
in Ihrem bevorzugten Texteditor und fügen Sie die IP-Adresse der Slaves hinzu. Meine hosts
Datei bestand aus einer einzelnen Zeile, die lautete 192.168.0.22
.
Hinweis Es ist möglicherweise eine gute Idee, Ihrem Slave eine statische IP-Adresse zuzuweisen. Andernfalls müssen Sie diese Datei ändern, wenn sich die IP-Adresse ändert.
Verwenden
Alles läuft gut, Sie sollten distcc ganz einfach verwenden können. Zum Beispiel kompilieren hello.c
zu hello.o
, run
distcc arm-unknown-linux-gnueabi-gcc -c -o hello.o hello.c
Beispiel: Hallo Welt!
Ich habe ein einfaches Beispiel in meinem Home-Verzeichnis eingerichtet, das aus 2 Dateien bestand.
# file: Makefile
hello.o: hello.c
hello: hello.o
# file: hello.c
#include <stdio.h>
int main() {
printf("Hello World!\n");
return 0;
}
Das Ausführen make hello
wird lokal kompiliert. Sie sollten dies zuerst als Schnelltest tun. Weiter, ich werde warten.
Beim Ausführen make hello CC="distcc arm-unknown-linux-gnueabi-gcc"
wird eine verteilte Kompilierung ausgeführt.
Hinweis Die Vorverarbeitung und Verknüpfung erfolgt weiterhin auf dem RPi.
Debuggen
Es hat eine Weile gedauert, bis dies richtig funktioniert hat, und das beste Debugging- Tool, das ich gefunden habe, war eine einfache Umgebungsvariable. Wenn du
export DISTCC_VERBOSE=1
Der distcc
Client gibt viele nützliche Informationen aus.
Dies ist ein langer Beitrag, daher wäre jedes Feedback dankbar. Ich hoffe ich habe mich an alle Schritte erinnert!