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

Visual Studio 2019 x86编译Protocol Buffer报错问题求助

问题背景
  • 编译目标:基于Visual Studio 2019编译x86版本ProtocolBuffer
  • 初始执行的Release编译cmake命令如下:
cmake -G "NMake Makefiles" ^
 -DCMAKE_BUILD_TYPE=Release ^
 -DCMAKE_GENERATOR_PLATFORM=Win32 ^
 -DCMAKE_INSTALL_PREFIX=C:\protocolbuffers\install ^
 C:\protocolbuffers\protobuf
  • 执行上述命令触发两类报错:
    1. 配置阶段直接报错:

CMake Error at CMakeLists.txt:24 (project): Generator

NMake Makefiles

does not support platform specification, but platform

Win32

was specified.

CMake Error: CMAKE_C_COMPILER not set, after EnableLanguage
CMake Error: CMAKE_CXX_COMPILER not set, after EnableLanguage

  1. 移除-DCMAKE_GENERATOR_PLATFORM=Win32 ^参数后配置可通过,但编译阶段报错中断:

protocolbuffers\protobuf\src\google\protobuf\extension_set_unittest.cc(871):
note: see reference to function template instantiation 'int google::protobuf::internal::RepeatedFieldLowerClampLimit<int64_t,4>(void)' being compiled
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe"' : return code '0x2' Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86\nmake.exe"' : return code '0x2' Stop.
NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86\nmake.exe"' : return code '0x2' Stop.

  • 预期编译产出:

    静态库文件:libprotobuf.lib、libprotobuf-lite.lib、libprotoc.lib
    可执行程序:protoc.exe

报错根因
  • NMake Makefiles是单配置生成器,本身不支持CMAKE_GENERATOR_PLATFORM参数,该参数仅对Visual Studio这类多配置生成器生效。
  • 未加载VS x86编译环境时直接在普通命令行执行cmake,无法识别MSVC编译器路径,触发编译器未设置的报错。
  • 默认编译配置会包含单元测试模块,x86环境下测试代码存在已知编译问题,触发编译中断。
正确编译操作步骤
  1. 启动对应编译环境命令行
    从Windows开始菜单找到x86 Native Tools Command Prompt for VS 2019启动,禁止使用普通cmd、PowerShell窗口操作,该专用命令行会自动加载x86架构所需的MSVC编译器、Windows SDK环境变量,从根源避免编译器找不到的问题。
  2. 创建独立编译目录
    执行以下命令进入protobuf源码路径,创建单独的build目录隔离编译中间文件,避免污染源码目录:
    cd C:\protocolbuffers\protobuf
    mkdir build_x86
    cd build_x86
    
  3. 执行cmake配置
    NMake生成器的目标架构由启动的命令行环境决定,不需要额外传平台参数,同时关闭测试、示例等非必要编译项规避编译错误:
    cmake -G "NMake Makefiles" ^
     -DCMAKE_BUILD_TYPE=Release ^
     -DCMAKE_INSTALL_PREFIX=C:\protocolbuffers\install ^
     -Dprotobuf_BUILD_TESTS=OFF ^
     -Dprotobuf_BUILD_EXAMPLES=OFF ^
     -Dprotobuf_MSVC_STATIC_RUNTIME=OFF ^
     ..
    
    关键参数说明:
    • -Dprotobuf_BUILD_TESTS=OFF:关闭单元测试编译,直接解决extension_set_unittest.cc的编译报错
    • -Dprotobuf_BUILD_EXAMPLES=OFF:跳过示例代码编译,缩短编译耗时
    • -Dprotobuf_MSVC_STATIC_RUNTIME=OFF:编译动态链接CRT的库文件,和VS默认项目配置匹配,如需静态链接CRT可将值改为ON
  4. 执行编译
    配置无报错后,直接执行nmake命令启动编译:
    nmake
    
  5. 安装产出文件
    编译完成后执行安装命令,所有产出文件会自动复制到之前指定的安装目录:
    nmake install
    
  6. 结果校验
    进入C:\protocolbuffers\install路径,lib子目录下可找到三个目标lib文件,bin子目录下可找到protoc.exe,即编译完成。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 04:57:25