EnglischFranzösischSpanisch

Ad


OnWorks-Favicon

include_server – Online in der Cloud

Führen Sie include_server im kostenlosen Hosting-Anbieter OnWorks über Ubuntu Online, Fedora Online, den Windows-Online-Emulator oder den MAC OS-Online-Emulator aus

Dies ist der Befehl include_server, der beim kostenlosen Hosting-Anbieter OnWorks mit einer unserer zahlreichen kostenlosen Online-Workstations wie Ubuntu Online, Fedora Online, dem Windows-Online-Emulator oder dem MAC OS-Online-Emulator ausgeführt werden kann

PROGRAMM:

NAME/FUNKTION


include_server.py – konservative Annäherung an Include-Abhängigkeiten für C/C++

ZUSAMMENFASSUNG


include_server --Hafen INCLUDE_SERVER_PORT [OPTIONEN]

BESCHREIBUNG


include_server.py startet einen Include-Server-Prozess. Dieser Prozess beantwortet Anfragen von
distcc(1) Kunden darüber, welche Dateien in C/C++-Kompilierungen einbezogen werden sollen. Die include_server.py
Der Befehl selbst wird beendet, sobald der Include-Server erzeugt wurde.

Das Argument INCLUDE_SERVER_PORT ist der Name eines Sockets, der für die gesamte Kommunikation verwendet wird
zwischen distcc-Clients und dem Include-Server. Der distcc-pumpe(1) Der Befehl ist verantwortlich
zum Erstellen des Socket-Speicherorts, zum Übergeben an dieses Skript und zum Übergeben an alle
distcc-Clients über die Umgebungsvariable INCLUDE_SERVER_PORT.

Das vom Include-Server verwendete Protokoll verwendet die RPC-Implementierung von distcc. Jeder Distcc
Die Anfrage besteht aus (1) dem aktuellen Verzeichnis und (2) der Liste der Argumente des
Kompilierungsbefehl.

Wenn der Include-Server die Anfrage verarbeiten kann, antwortet er dem distcc-Client per
Senden einer Liste von Dateipfaden. Die Dateipfade sind die der komprimierten Quelle und des Headers
Dateien, die für die Kompilierung durch Include-Analyse als notwendig befunden wurden. Die Liste auch
umfasst symbolische Links und sogar Dummy-Dateien, die der Kompilierungsserver benötigt
Erstellen Sie eine genaue Kopie der Teile des Dateisystems, die für die Kompilierung benötigt werden. In
Auf diese Weise wird eine benötigte Header-Datei wie /path/foo.h komprimiert, umbenannt und in einem gespeichert
temporärer Speicherort, z. B. /dev/shm/tmpiAvfGv.include_server-9368-1/path/foo.h.lzo. Der
Der distcc-Client leitet diese Dateien an einen Kompilierungsserver weiter, wo sie gespeichert werden
unkomprimiert und temporär gemountet.

Wenn der Include-Server die Anfrage nicht verarbeiten kann, gibt er die leere Liste zurück
zum distcc-Client.

Es gibt zwei Arten von Fehlern, die sich auf den Include-Server beziehen. Der Include-Server kann
Die Berechnung der Includes schlägt fehl oder schlägt auf andere Weise fehl, siehe Abschnitt eNTHALTEN SERVER SYMPTOME.
Außerdem kann die Kompilierung auf dem Entfernungsserver aufgrund unzureichender Berechnungen fehlschlagen
Abschluss einschließen, dann aber erfolgreich sein, wenn es lokal wiederholt wird, siehe Abschnitt DISTCC DISKREPANZ
SYMPTOME.

zur Auswahl ZUSAMMENFASSUNG


Die folgenden Optionen werden von include_server.py verstanden.

-dPAT, --debug_pattern=PAT
Bitvektor zum Einschalten von Warnungen und zum Debuggen
1 = Warnungen
2 = einige Funktionen verfolgen
andere Zweierpotenzen: siehe include_server/basics.py.

-e, --Email
Senden Sie eine E-Mail an „distcc-pump-errors“ oder, falls definiert, an den Wert der Umgebungsvariablen
DISTCC_EMAILLOG_WHOM_TO_BLAME, wenn der Include-Server in Schwierigkeiten gerät. Die Standardeinstellung ist
keine E-Mails senden.

--email_bound NUMBER
Maximale Anzahl zu versendender E-Mails (zusätzlich zu einer endgültigen E-Mail). Standard: 3.

--keine Email
Senden Sie keine E-Mails. Dies ist die Standardeinstellung.

--path_observation_re=RE
Geben Sie eine Warnmeldung aus, wenn ein Dateiname in einen passenden realen Pfad aufgelöst wird
von RE, einem regulären Ausdruck in der Python-Syntax. Dies ist nützlich für die Suche
herauszufinden, woher die enthaltenen Dateien tatsächlich stammen. Verwenden Sie RE="", um sie alle zu finden. Notiz:
Warnungen müssen mindestens mit -d1 aktiviert werden.

--pid_file DATEIPFAD
Die PID des Include-Servers wird in die Datei FILEPATH geschrieben. Dies ermöglicht ein Skript
so ein distcc-pumpe um den Include-Server herunterzufahren.

-S, --Statistiken
Gibt Informationen zur Include-Analyse an die Standardausgabe aus.

--stat_reset_triggers=LISTE
Leeren Sie Statistik-Caches, wenn sich der Zeitstempel eines Dateipfads in LIST ändert oder die
Dateipfad entsteht oder verschwindet. LIST ist eine durch Doppelpunkte getrennte Zeichenfolge
Dateipfade, die möglicherweise einfache Globs enthalten (wie vom Glob-Modul von Python zugelassen).
Drucken Sie eine Warnung aus, wenn eine solche Änderung auftritt (sofern Warnungen aktiviert sind). Das
Die Option ermöglicht begrenzte Ausnahmen von der normalen Annahme dieser Quelle durch distcc-pump
Dateien werden während des Builds nicht geändert.

-T, --Zeit
Verstrichene, Benutzer- und Systemzeit auf stderr drucken.

--unsafe_absolute_includes
Führen Sie die Vorverarbeitung auf dem Kompilierungsserver durch, auch wenn absolute Dateipfade enthalten sind
angetroffen werden. Normalerweise greift der Include-Server auf die lokale Vorverarbeitung zurück
wenn absolute Includes erkannt werden. Daher ist dieses Flag nützlich, um dies zu verhindern
Fallbacks, wenn das Absolute einschließt, sind entweder wegen des Absoluten ein Fehlalarm
include wird während der Vorverarbeitung verworfen oder weil die Datei absolut eingeschlossen ist
existiert auf den Kompilierungsservern.

Genauer gesagt werden mit --unsafe_absolute_includes absolute Includes ignoriert
Zu den Zwecken der Erhebung gehört auch der Abschluss. Die Verwendung dieser Option kann dazu führen
falsche Ergebnisse, da (1) der Header möglicherweise tatsächlich im enthalten ist
Kompilierungsserver und es ist möglicherweise nicht dasselbe wie auf dem Client, (2) das Include
Direktiven des Headers werden nicht weiter analysiert.

Die Option ist nützlich zum Kompilieren von Code, der über solche fest codierten absoluten Positionen verfügt
von Header-Dateien in bedingten Anweisungen (z. B. „#ifdef“), die das rendern
beinhaltet irrelevant. Genauer gesagt müssen diese Includes entfernt werden
Vorverarbeitung für die eigentliche Konfiguration. Dann stellt sich die Frage nach der Existenz des
Die Header-Datei ist strittig und die Remote-Kompilierung ist einwandfrei. Dies ist häufig der Fall, wenn
Solche Includes sind für ungewöhnliche Konfigurationen gedacht, die sich von den tatsächlichen unterscheiden
Konfiguration.

-in, --verifizieren
Stellen Sie sicher, dass Dateien im CPP-Abschluss im durch „Include“ berechneten Abschluss enthalten sind
Prozessor.

-w, --write_include_closure
Schreiben Sie eine .d_ approx-Datei, die alle vom Include berechneten eingeschlossenen Dateien auflistet
Server; mit -x zusätzlich die von CPP berechneten enthaltenen Dateien in a schreiben
.d_exact-Datei.

-X, --exact_analysis
Verwenden Sie stattdessen CPP und lassen Sie die System-Header-Dateien nicht aus.

eNTHALTEN SERVER SYMPTOME UND PROBLEME


Die wahrscheinlichsten Meldungen und Warnungen, die vom Include-Prozessor kommen, sind unten aufgeführt.

Anarbeitung örtlich. Include Server nicht Abdeckung: Konnte nicht bestimmen Standard System
das Verzeichnisse
Um die Standard-Header-Verzeichnisse des Systems zu ermitteln, führt der Include-Server Folgendes aus
Der Compiler wird für jede während seiner Sitzung benötigte Sprache einmal aufgerufen. Diese Meldung zeigt an
dass der für distcc angegebene Compiler auf dem Client nicht vorhanden ist.

Anarbeitung örtlich. Include Server nicht Abdeckung: Kaution weil das Server
verbrachte mehr als ... s Benutzer Zeit Umgang Anforderung
In ungewöhnlichen Situationen kann der Include-Server sehr komplizierte Makros nicht analysieren
Ausdrücke. Der distcc-Client verwendet den einfachen distcc-Modus.

Warnung: Dateipfad sollen be relativ aber nicht
Der Include-Server akzeptiert keine absoluten Dateipfade, wie z
/usr/include/stdio.h, in Include-Anweisungen, da es dafür keine Garantie gibt
Dieser Header auf dem Kompilierungsserver-Computer ist derselbe wie der auf dem
Klient. Der Include-Server gibt die Analyse des Include-Abschlusses auf. Der distcc
Der Client kann den Pump-Modus nicht verwenden.

Um dieses Problem nicht immer zuverlässig zu lösen, legen Sie die Umgebungsvariable fest
INCLUDE_SERVER_ARGS='--unsafe_absolute_includes' beim Aufruf der distcc-pump
Skript, um die Option --unsafe_absolute_includes an den Include-Server zu übergeben.

Warnung: Absolute Dateipfad ... wurde IGNORIERT
--unsafe_absolute_includes wird verwendet. Diese Situation passiert unter demselben
Situationen wie wenn „Dateipfad muss relativ sein, ist aber nicht“ ausgegeben wird, aber in diesem
In diesem Fall liefert das Include eine Antwort an den distcc-Client.

Warnung: Path '/PFAD/DATEI' geändert/kam in Existenz/Nr länger existiert
Diese Warnungen werden ausgegeben, wenn Stat-Reset-Trigger verwendet werden. Weil /PATH/FILE
geändert, löscht der Include-Server seine Caches; die neue Version der Datei (oder die
Fehlen davon) macht die Include-Analyse ungültig. Diese Nachricht kann normalerweise sein
ignoriert; Dies bedeutet jedoch eine etwas prekäre Verwendung von Dateien durch das Build-System.
Es wird empfohlen, das Build-System zu reparieren, damit Dateien nicht neu geschrieben werden.

Warnung: Aussichten für Übersetzung Einheit ... Nachschlagen of Datei ... entschlossen zu ... deren realpath is
...
Diese Warnung tritt mit --path_observation_re auf, wenn ein neuer realer Pfad mit a übereinstimmt
Quell- oder Headerdatei wird beobachtet.

DISTCC DISKREPANZ SYMPTOME


Die Interaktionen zwischen dem Build-System, distcc und dem Include-Server sind etwas
Komplex. Wenn ein distcc-Befehl eine fehlgeschlagene Kompilierung vom Remote-Server erhält
Wiederholt die Kompilierung lokal. In diesem Abschnitt werden die Ursachen von Abweichungen erläutert
zwischen Remote- und lokaler Kompilierung. Diese werden durch die Herabstufungsmeldung gekennzeichnet:

__________Warnung: ... Pumpenmodus Zusammenstellung(en) gescheitert on Server, aber gelungen örtlich.
__________Distcc-Pumpe wurde herabgestuft zu Ebene Modus arbeiten können. See Bezirk Diskrepanz Symptome
Abschnitt in include_server(1) Mann

Das distcc-pump-Skript gibt diese Meldung am Ende des Builds aus. Dies bedeutet, dass für at
Mindestens ein distcc-Aufruf einer lokalen Kompilierung war nach der Remote-Kompilierung erfolgreich
fehlgeschlagen. Jeder distcc-Aufruf, bei dem eine solche Diskrepanz aufgetreten ist, gibt wiederum auch eine aus
Nachricht wie:

Warnung: entfernt Zusammenstellung of '...' gescheitert, wiederholt örtlich und habe a anders Ergebnis.

Durch die Herabstufung wird bei nachfolgenden distcc-Aufrufen der reine distcc-Modus verwendet. Daher
Die Vorverarbeitung erfolgt für den Rest des Builds auf dem lokalen Computer. Das
Die Technik verhindert sehr langsame Builds, bei denen alle Kompilierungen auf dem lokalen Computer landen
nachdem es aus der Ferne gescheitert ist.

Wenn natürlich die lokalen Kompilierungen nach den Remote-Fehlern fehlschlagen, dann ist der distcc
Der Aufruf wird mit einem Status ungleich Null der lokalen Kompilierung beendet. Die Fehlermeldungen
Abgedruckt sind auch die der lokalen Zusammenstellung.

Das Fallback-Verhalten für den distcc-pump-Modus zur lokalen Kompilierung kann durch Einstellung deaktiviert werden
Setzen Sie die Umgebungsvariable DISTCC_FALLBACK auf 1, wodurch der Befehl distcc schnell fehlschlägt
da die Remote-Kompilierung fehlgeschlagen ist. Diese Einstellung ist sehr nützlich zum Debuggen, warum das
Die Remote-Kompilierung ist fehlgeschlagen, da jetzt die Ausgabe vom Server gedruckt wird.

Als nächstes diskutieren wir die möglichen Ursachen für Abweichungen.

Das Benutzer geändert a Quelle or Kopfzeile Datei im bauen.
Dies führt natürlich zu inkonsistenten Ergebnissen.

A Quelle or Kopfzeile Datei geändert im bauen.
Das Build-System schreibt eine Datei neu. Beim Linux-Kernel 2.6 geschieht dies für
„include/linux/compile.h“ und „include/asm/asm-offsets.h“. Dieser Zustand ist behoben
indem Sie den Include-Server darüber informieren, dass er seine Caches zurücksetzen muss, wenn eine Statistik vorliegt
der Dateien ändert sich. Praktisch geschieht dies, indem die Dateien in einem Doppelpunkt zusammengefasst werden.
Getrennte Liste und anschließendes Festlegen des Befehls INCLUDE_SERVER_ARGS wie folgt:

include_server_args="--stat_reset_triggers=include/linux/compile.h:include/asm/asm-
offsets.h"

A Kopfzeile Datei is möglicherweise inbegriffen, aber die nicht existieren, und is dann später enthalten.

Dies tritt auf, wenn ein Header foo.h eine andere Header-Datei trick.h enthält, die jedoch
Die Datei trick.h wurde noch nicht generiert und die Einbindung wird tatsächlich ignoriert
aufgrund von Vorverarbeitungsanweisungen. Der Include-Server sucht nach dem
Existenz von trick.h, weil es alle möglichen Way-Direktiven übermäßig annähert
tatsächlich bewerten. Es wurde festgestellt, dass die Datei trick.h nicht existiert. Wenn es später ist
generiert und dann wirklich eingebunden wird, dann wird der Include-Server fälschlicherweise glauben
dass die Datei immer noch nicht existiert. Die Lösung für dieses Problem besteht darin, das zu machen
Build-System generiert trick.h, bevor zum ersten Mal eine Header-Datei eingebunden wird
das macht einen syntaktischen Verweis auf trick.h

Das das Server wurde begonnen mit --unsafe_absolute_includes.
Dies ist ein Problem, wenn lokal Header-Dateien vorhanden sind, die remote nicht vorhanden sind
die tatsächlich genutzt werden. Solche Includes werden häufig durch Bedingungen geschützt
Direktiven, die so auswerten, dass sie tatsächlich nur spezifisch und häufig verwendet werden
ungewöhnliche Plattformen. Wenn Sie nicht für eine solche Plattform kompilieren, ist dies möglicherweise der Fall
richtig zu verwenden --unsafe_absolute_include.

Das das Server hat berechnet Wrongs beinhaltet.
Eine solche Situation ist uns nicht bekannt.

EXIT CODES


Der Exit-Code von include_server.py ist normalerweise 0. Dass der Include-Server gestartet wurde
ordnungsgemäß durch die Existenz der pid_file kommuniziert.

VARIABLEN


DISTCC_EMAILLOG_WHOM_TO_BLAME Die E-Mail-Adresse, die für die automatisierte Einbindung des Servers verwendet werden soll
E-Mails. Der Standardwert ist „distcc-pump-errors“ (eine E-Mail-Adresse, die wahrscheinlich verwendet wird).
nicht in Ihrer Domain vorhanden).

Darüber hinaus kann der Aufruf des Compilers zusätzliche Umgebungsvariablen verwenden.

Verwenden Sie include_server online über die Dienste von onworks.net


Kostenlose Server & Workstations

Laden Sie Windows- und Linux-Apps herunter

Linux-Befehle

Ad