Heim >Backend-Entwicklung >PHP-Tutorial >So gehen Sie mit übermäßig vielen Warnmeldungen um, wenn Sie „pecl install grpc' ausführen
Beim Ausführen von pecl install grpc können Sie auf eine Lawine von Warnmeldungen wie diesen stoßen:
#7 67.72 /tmp/pear/temp/grpc/src/core/lib/promise/detail/promise_factory.h:174:5: warning: 'always_inline' function might not be inlinable [-Wattributes] #7 352.5 /tmp/pear/temp/grpc/src/core/lib/event_engine/forkable.h:61:34: warning: 'unused' attribute ignored [-Wattributes]
Es kann Hunderte dieser Warnungen geben, die Ihre Protokolle überfluten. Dies war besonders problematisch während der Bereitstellung, wo CI/CD-Pipelines die Protokollgrenzen überschritten, Fehler verursachten und den Prozess anhielten.
Die Online-Suche nach Warnmeldungen verweist auf GCC, die GNU Compiler Collection.
Es stellt sich heraus, dass diese Warnungen vom Compiler beim Erstellen des gRPC-Quellcodes generiert werden. Da die Warnungen aus dem Quellcode von gRPC stammen, ist es für Benutzer nicht möglich, den Quellcode direkt zu korrigieren, um die Warnungen zu unterdrücken.
Glücklicherweise bietet GCC mehrere Optionen zum Unterdrücken von Warnmeldungen, die Sie während des Build-Prozesses an den Compiler übergeben können:
Warnoptionen in der GCC-Dokumentation
Es gibt jedoch keine einfache Möglichkeit, diese Optionen direkt beim Ausführen von pecl install grpc zu übergeben. Wenn Sie eines kennen, lassen Sie es mich bitte wissen – ich werde mit Freudentränen feiern! ?
Und was nun?
Die Antwort kam mir aus einem StackOverflow-Thread: Anstatt pecl install alles erledigen zu lassen, können Sie den Prozess in kleinere Schritte unterteilen und die Optionen während der Kompilierungsphase übergeben.
Referenz: StackOverflow
Da gRPC in C geschrieben ist, können wir Umgebungsvariablen wie CFLAGS und CXXFLAGS verwenden, um Optionen anzugeben, die die Warnungen während der Kompilierung unterdrücken:
Gentoo Wiki zur GCC-Optimierung
Nehmen wir an, gRPC wird in einer Docker-Datei installiert.
RUN pecl install grpc
RUN pecl download grpc \ && tar xzf $(ls grpc-*.tgz | head -n 1) \ && cd $(ls -d grpc-*/ | head -n 1) \ && phpize \ && ./configure --with-php-config=/usr/local/bin/php-config \ && make -e CFLAGS="-Wno-attributes -Wno-unused-parameter -Wno-deprecated-declarations -Wno-return-type" CXXFLAGS="-Wno-attributes -Wno-unused-parameter -Wno-deprecated-declarations -Wno-return-type" \ && make install
Die Nachbefehle ahmen nach, was pecl install intern tut, jedoch mit mehr Kontrolle. Die Aufschlüsselung des Prozesses zeigte, wie viel pecl install hinter den Kulissen abwickelt – beeindruckend!
Die Warnungen erschienen während der Erstellungsphase, daher habe ich die Unterdrückungsoptionen über die Umgebungsvariablen CFLAGS und CXXFLAGS übergeben:
make -e CFLAGS="-Wno-attributes -Wno-unused-parameter -Wno-deprecated-declarations -Wno-return-type" CXXFLAGS="-Wno-attributes -Wno-unused-parameter -Wno-deprecated-declarations -Wno-return-type"
Um zu bestimmen, welche Unterdrückungsoptionen verwendet werden sollen, schauen Sie sich das Ende der Warnmeldungen an. Sie werden häufig Hinweise wie [-Wattributes] oder [-Wunused-parameter] sehen. Fügen Sie am Anfang „no“ hinzu, z. B. „-Wno-attributes“ oder „-Wno-unused-parameter“, um sie zu unterdrücken.
Weitere Einzelheiten finden Sie in der offiziellen Dokumentation:
Warnoptionen in der GCC-Dokumentation
Mit diesem Ansatz bin ich dem Sumpf der gRPC-Warnmeldungen erfolgreich entkommen. Allerdings wurde dadurch das Problem mit der CI/CD-Protokollbegrenzung nicht vollständig gelöst, auf das ich in einem zukünftigen Beitrag eingehen werde.
Wenn dieser Artikel auch nur einer Person hilft, dem Sumpf der gRPC-Warnmeldungen zu entkommen, freue ich mich sehr! ?
Das obige ist der detaillierte Inhalt vonSo gehen Sie mit übermäßig vielen Warnmeldungen um, wenn Sie „pecl install grpc' ausführen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!