Maison >développement back-end >tutoriel php >Comment gérer les messages d'avertissement excessifs lors de l'exécution de « pecl install grpc »
Lors de l'exécution de pecl install grpc, vous pouvez rencontrer une avalanche de messages d'avertissement comme ceux-ci :
#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]
Il peut y avoir des centaines de ces avertissements, inondant vos journaux. Cela a été particulièrement problématique lors du déploiement, où les pipelines CI/CD dépassaient les limites de journalisation, provoquant des erreurs et interrompant le processus.
La recherche des messages d'avertissement en ligne pointe vers GCC, la collection de compilateurs GNU.
Il s'avère que ces avertissements sont générés par le compilateur lors de la création du code source de gRPC. Étant donné que les avertissements proviennent du code source de gRPC, il n'est pas possible pour les utilisateurs de corriger directement le code source pour supprimer les avertissements.
Heureusement, GCC propose plusieurs options pour supprimer les messages d'avertissement, que vous pouvez transmettre au compilateur pendant le processus de construction :
Options d'avertissement dans la documentation GCC
Cependant, il n'existe aucun moyen simple de transmettre ces options directement lors de l'exécution de pecl install grpc. Si vous en connaissez un, faites-le-moi savoir, je célébrerai avec des larmes de joie ! ?
Et maintenant ?
La réponse m'est venue d'un fil de discussion StackOverflow : au lieu de laisser pecl install gérer tout, vous pouvez diviser le processus en étapes plus petites et transmettre les options pendant la phase de compilation.
Référence : StackOverflow
Puisque gRPC est écrit en C , nous pouvons utiliser des variables d'environnement comme CFLAGS et CXXFLAGS pour spécifier des options qui suppriment les avertissements lors de la compilation :
Wiki Gentoo sur l'optimisation GCC
Supposons que gRPC soit installé dans un Dockerfile.
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
Les commandes after imitent ce que pecl install fait en interne, mais avec plus de contrôle. L'analyse du processus a révélé à quel point pecl install gère en coulisses : impressionnant !
Les warnings sont apparus lors de la phase make, j'ai donc passé les options de suppression via les variables d'environnement CFLAGS et CXXFLAGS :
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"
Pour déterminer les options de suppression à utiliser, regardez la fin des messages d'avertissement. Vous verrez souvent des indices tels que [-Wattributes] ou [-Wunused-parameter]. Ajoutez non au début de ceux-ci, par exemple -Wno-attributes ou -Wno-unused-parameter, pour les supprimer.
Pour plus de détails, référez-vous à la documentation officielle :
Options d'avertissement dans la documentation GCC
Grâce à cette approche, j'ai réussi à échapper au marais des messages d'avertissement gRPC. Cependant, cela n’a pas entièrement résolu le problème de limite de journalisation CI/CD, que j’aborderai dans un prochain article.
Si cet article aide ne serait-ce qu’une seule personne à échapper au marais de messages d’avertissement gRPC, j’en serai ravi ! ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!