2016-06-15 18 views
0

In Anbetracht eines verteilten Compilers wie incredibuild oder distcc, nehme ich an, dass ich einen Kompilierjob an einen entfernten Rechner sende, um eine C++ - Quelldatei zu kompilieren, die von einer statischen oder dynamischen Bibliothek abhängt (etwas, das ich installieren müsste, um mein Programm zu erstellen)). Benötigt die entfernte Maschine diese Bibliothek, um sie zu kompilieren?Benötigen verteilte Compiler Abhängigkeiten beim Kompilieren?

Aus meinem Verständnis von C und C++, wenn eine Quelldatei in eine Objektdatei kompiliert wird, "stubs" der Compiler alles außerhalb des Quellcodes (z. B. ein Aufruf einer Funktion, die nicht im Code ist), dh nur als Teil eines Headers definiert). Wenn die Verknüpfung stattfindet, müssen die Abhängigkeiten vorhanden sein, damit der Linker sie untersuchen kann, um herauszufinden, wo eine Funktion implementiert ist. Wenn das der Fall ist, bedeutet das, dass verteilte Compiler nur dann kompilieren können, wenn sie die Abhängigkeiten installiert haben? Gilt das Gleiche für dynamische und statische Bibliotheken?

Antwort

0

Die Build-Reihenfolge ist in der Tat das Herz eines erfolgreichen Kompilierungsprozesses :) Verteilte Builds müssen die gleiche Build-Reihenfolge erhalten, während sie den Build viel paralleler ausführen. Wenn Sie einen Build mit IncrediBUild ausführen, verwaltet der Computer, der den Build startet, den Buildprozess und stellt sicher, dass jede verteilte Kompilierungsaufgabe in der korrekten Erstellungsreihenfolge erstellt wird, unabhängig davon, welche Maschine den Build tatsächlich ausführt. Wenn eine Kompilierungsaufgabe an einen Remotecomputer gesendet wird, wird sie zusammen mit den Basisumgebungseinstellungen des Computers gesendet, der den Build gestartet hat. Wir nennen es "Prozessvirtualisierung". Wenn während der Kompilierung dieses Remote-Prozesses eine bestimmte Datei benötigt wird (wie in einem von Ihnen beschriebenen Szenario), kann IncrediBuild sie von dem Rechner abrufen, der den Build gestartet hat, und ihn im Cache des Remote-Rechners ablegen. Diese Datei wird für diese Kompilierungsaufgabe verwendet und für zukünftige Verwendung im Cache des Remote-Computers aufbewahrt. Aufgrund dieses Mechanismus müssen die Remote-Computer überhaupt keine Quelldateien haben. Sie können im Grunde normale Windows-Maschinen sein - ohne Entwicklungsumgebung. Ich hoffe, ich konnte etwas Licht in dieses Thema bringen.

+0

Etwas, ja :) Aber meine Frage war spezifischer auf die Anforderungen der Kompilierung vs Verknüpfung. Erfordert der Prozess des Kompilierens von Quellcode zu einer Objektdatei die Bibliotheken? Oder wird das nur beim Verknüpfen benötigt? –