首頁 >後端開發 >php教程 >執行'pecl install grpc”時如何處理過多的警告訊息

執行'pecl install grpc”時如何處理過多的警告訊息

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-27 13:44:16685瀏覽

How to Handle Excessive Warning Messages When Running `pecl install grpc`

壓倒性的警告訊息可能會很麻煩

執行 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中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn