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