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

Windows10下MSYS2 GCC在CMD/PowerShell编译时ld返回116错误排查

问题原因分析
  • 环境变量依赖不全
    MSYS2的GCC工具链(包括ld链接器)依赖MSYS2专属的Unix风格环境变量和系统库路径。CMD/PowerShell是原生Windows环境,没有加载MSYS2初始化脚本配置的环境,导致链接器找不到必要的依赖库,触发错误。对比MSYS2 UCRT64 shell里的echo $PATH和CMD里的echo %PATH%,会发现原生环境缺少C:\msys64\ucrt64\lib、C:\msys64\usr\bin这类关键路径。

  • 路径格式解析冲突
    MSYS2工具链默认适配POSIX风格路径,CMD/PowerShell使用的Windows路径格式在链接阶段可能无法被ld正确解析。MSYS2 shell会自动完成路径转换,所以不会出问题,但原生环境没有这个转换机制。

  • 链接器自身依赖缺失
    ld链接器是MSYS2编译的程序,依赖ucrtbase.dll等MSYS2提供的动态库。原生Windows环境下这些库不在系统PATH中时,链接器运行会出现隐性错误,返回116退出码。

可行解决方案
  • 通过MSYS2环境执行编译
    在CMD或PowerShell里调用MSYS2的UCRT64环境启动脚本,让编译在完整的MSYS2环境中运行:

    # 直接执行编译命令
    C:\msys64\ucrt64.exe -c "g++ ./project.cpp -o ./project.exe"
    # 或者先进入MSYS2 UCRT64环境再编译
    C:\msys64\ucrt64.exe
    # 在弹出的环境窗口中执行:g++ ./project.cpp -o ./project.exe
    
  • 临时补充环境变量
    在CMD中手动添加MSYS2关键路径到系统PATH,再执行编译:

    set PATH=C:\msys64\ucrt64\bin;C:\msys64\ucrt64\lib;C:\msys64\usr\bin;%PATH%
    g++ ./project.cpp -o ./project.exe
    

注意:这种方式可能和Windows原生工具产生冲突,仅适合临时使用。

  • CMake编译指定MSYS2工具链
    用CMake时,必须指定MSYS2提供的工具链文件,确保CMake使用正确的环境配置:
    cmake -G "MinGW Makefiles" -DCMAKE_TOOLCHAIN_FILE=C:/msys64/ucrt64/share/cmake/Modules/Platform/MSYS2.cmake ..
    make
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:03:10