You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

构建C++项目遇Protobuf版本不兼容错误求助

Protobuf与gRPC版本不兼容构建错误排查

问题详情

  • 构建C++项目时触发错误:Protobuf C++ gencode is built with an incompatible version of.
  • 当前通过Homebrew安装的依赖版本:
brew info grpc
==> grpc: stable 1.62.2 (bottled), HEAD
brew info protobuf
==> protobuf: stable 26.1 (bottled)
  • CMake构建Protobuf的配置代码:
set(_GRPC_GRPCPP gRPC::grpc++)
if(CMAKE_CROSSCOMPILING)
  find_program(_GRPC_CPP_PLUGIN_EXECUTABLE grpc_cpp_plugin)
else()
  set(_GRPC_CPP_PLUGIN_EXECUTABLE $<TARGET_FILE:gRPC::grpc_cpp_plugin>)
endif()

# Gets the protos file path
get_filename_component(PROTO_FILE "./proto/proto.proto" ABSOLUTE)
get_filename_component(PROTO_FILE_PATH "${PROTO_FILE}" PATH)

# Sets the location for generated files
file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/generated/)
set(PROTO_SOURCES "${CMAKE_BINARY_DIR}/generated/proto.pb.cc")
set(PROTO_HEADERS "${CMAKE_BINARY_DIR}/generated/proto.pb.h")
set(GRPC_SOURCES "${CMAKE_BINARY_DIR}/generated/proto.grpc.pb.cc")
set(GRPC_HEADERS "${CMAKE_BINARY_DIR}/generated/proto.grpc.pb.h")

set_property(SOURCE ${GRPC_SOURCES} ${PROTO_SOURCES} ${GRPC_HEADERS} ${PROTO_HEADERS} PROPERTY SKIP_AUTOMOC ON)

# Generate *.pb.* and *.grpc.* files from .proto file
add_custom_command (
  OUTPUT "${PROTO_SOURCES}" "${PROTO_HEADERS}" "${GRPC_SOURCES}" "${GRPC_HEADERS}"
  COMMAND ${_PROTOBUF_PROTOC}
  ARGS --grpc_out "${CMAKE_BINARY_DIR}/generated/"
       --cpp_out "${CMAKE_BINARY_DIR}/generated/"
       -I "${PROTO_FILE_PATH}"
       --plugin=protoc-gen-grpc="${_GRPC_CPP_PLUGIN_EXECUTABLE}"
       "${PROTO_FILE}"
  DEPENDS "${PROTO_FILE}"
)
  • 已尝试的解决操作:
brew uninstall --ignore-dependencies --force grpc opencv protobuf abseil
brew cleanup
brew autoremove
brew install grpc opencv
  • 附加错误信息(截图翻译):

致命错误:找不到'google/protobuf/stubs/common.h'文件
#include <google/protobuf/stubs/common.h>
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
生成过程中出现1个错误。

解决方向

  1. 匹配gRPC与Protobuf兼容版本
    gRPC 1.62.2官方兼容Protobuf 25.x系列,当前使用的26.1版本超出兼容范围,是核心冲突点。执行以下命令安装兼容版本:

    brew uninstall protobuf
    brew install protobuf@25
    brew link protobuf@25 --force
    
  2. 修正CMake依赖关联
    在CMakeLists开头添加依赖查找与版本验证,确保关联正确库文件:

    find_package(Protobuf REQUIRED)
    find_package(gRPC REQUIRED)
    # 打印版本确认匹配
    message(STATUS "Protobuf version: ${Protobuf_VERSION}")
    message(STATUS "gRPC version: ${gRPC_VERSION}")
    

    同时为目标程序添加正确的头文件路径与库链接:

    add_executable(your_target ${PROTO_SOURCES} ${GRPC_SOURCES} 你的主代码文件.cpp)
    target_link_libraries(your_target
      ${_GRPC_GRPCPP}
      ${Protobuf_LIBRARIES}
    )
    target_include_directories(your_target PRIVATE
      ${CMAKE_BINARY_DIR}/generated/
      ${Protobuf_INCLUDE_DIRS}
      ${gRPC_INCLUDE_DIRS}
    )
    
  3. 清理旧生成文件
    之前生成的.pb.cc/.pb.h文件是用不兼容版本生成的,删除${CMAKE_BINARY_DIR}/generated/下所有文件后重新构建。

  4. 排查多版本Protobuf冲突
    检查系统中是否存在其他版本的Protobuf:

    which protoc
    protoc --version
    

    若版本不符,调整环境变量让Homebrew安装的版本优先:

    echo 'export PATH="/usr/local/opt/protobuf@25/bin:$PATH"' >> ~/.zshrc
    source ~/.zshrc
    

内容的提问来源于stack exchange,提问作者Lys4nder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 06:05:02