运行 pecl install grpc 时,您可能会遇到大量警告消息,如下所示:
#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]
可能有数百个这样的警告,淹没了您的日志。这在部署期间尤其成问题,其中 CI/CD 管道会超出日志限制,导致错误并停止进程。
网上搜索警告信息,指向GCC,GNU编译器集合。
事实证明,这些警告是编译器在构建 gRPC 源代码时生成的。由于警告源自 gRPC 的源代码,用户无法直接修复源代码来抑制警告。
幸运的是,GCC 提供了几个选项来抑制警告消息,您可以在构建过程中将其传递给编译器:
GCC 文档中的警告选项
但是,在运行 pecl install grpc 时没有直接传递这些选项的简单方法。如果你知道,请告诉我——我会用喜悦的泪水来庆祝! ?
那么,现在怎么办?
我从 StackOverflow 的一个帖子中得到了答案:您可以将流程分解为更小的步骤,并在编译阶段传递选项,而不是让 pecl install 处理所有事情。
参考:StackOverflow
由于 gRPC 是用 C 编写的,我们可以使用 CFLAGS 和 CXXFLAGS 等环境变量来指定在编译期间抑制警告的选项:
Gentoo Wiki 关于 GCC 优化
假设 gRPC 正在安装在 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
after 命令模仿 pecl install 在内部执行的操作,但具有更多控制权。分解该过程揭示了 pecl 安装在幕后处理的量 - 令人印象深刻!
警告出现在make阶段,所以我通过CFLAGS和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"
要确定使用哪些抑制选项,请查看警告消息的末尾。您经常会看到诸如 [-Wattributes] 或 [-Wunused-parameter] 之类的提示。在这些的开头添加 no,例如 -Wno-attributes 或 -Wno-unused-parameter,以抑制它们。
更多详情请参考官方文档:
GCC 文档中的警告选项
通过这种方法,我成功摆脱了 gRPC 警告消息的沼泽。然而,这并没有完全解决 CI/CD 日志限制问题,我将在以后的文章中解决这个问题。
如果这篇文章能帮助一个人逃离 gRPC 警告消息沼泽,我会很高兴! ?
以上是运行'pecl install grpc”时如何处理过多的警告消息的详细内容。更多信息请关注PHP中文网其他相关文章!