g++ 12.1.0(x86_64-w64-mingw32)编译错误行号错误是否为版本BUG?
GCC 12.1.0(MSYS2 MinGW-w64)报错行号不正确问题
问题场景
通过MSYS2升级Windows上的GCC后,编译器报错时显示的行号与实际错误位置不符。例如编译以下代码:
1 | int main() { 2 | auto i; 3 | return 0; 4 | }
使用编译命令:
g++ main.cpp -o main.exe -g
得到的错误信息错误指向了第6行:
main.cpp: In function 'int main()': main.cpp:6:3: error: declaration of 'auto i' has no initializer 6 | } | ^
实际错误位于代码第2行,当前使用的GCC版本信息如下:
$ g++ -v Using built-in specs. COLLECT_GCC=D:\msys64\mingw64\bin\g++.exe COLLECT_LTO_WRAPPER=D:/msys64/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/12.1.0/lto-wrapper.exe Target: x86_64-w64-mingw32 Configured with: ../gcc-12.1.0/configure --prefix=/mingw64 --with-local-prefix=/mingw64/local --build=x86_64-w64-mingw32 --host=x86_64-w64-mingw32 --target=x86_64-w64-mingw32 --with-native-system-header-dir=/mingw64/include --libexecdir=/mingw64/lib --enable-bootstrap --enable-checking=release --with-arch=x86-64 --with-tune=generic --enable-languages=c,lto,c++,fortran,ada,objc,obj-c++,jit --enable-shared --enable-static --enable-libatomic --enable-threads=posix --enable-graphite --enable-fully-dynamic-string --enable-libstdcxx-filesystem-ts --enable-libstdcxx-time --disable-libstdcxx-pch --enable-lto --enable-libgomp --disable-multilib --disable-rpath --disable-win32-registry --disable-nls --disable-werror --disable-symvers --with-libiconv --with-system-zlib --with-gmp=/mingw64 --with-mpfr=/mingw64 --with-mpc=/mingw64 --with-isl=/mingw64 --with-pkgversion='Rev3, Built by MSYS2 project' --with-bugurl=https://github.com/msys2/MINGW-packages/issues --with-gnu-as --with-gnu-ld --disable-libstdcxx-debug --with-boot-ldflags=-static-libstdc++ --with-stage1-ldflags=-static-libstdc++ Thread model: posix Supported LTO compression algorithms: zlib zstd gcc version 12.1.0 (Rev3, Built by MSYS2 project)
原因分析
这是GCC 12.x版本在MinGW-w64环境下的已知bug,属于编译器前端处理特定语法错误时的行号追踪逻辑问题,与代码本身或编译命令无关。
解决方法
- 升级GCC版本:MSYS2的MinGW-w64仓库已提供修复该问题的GCC 13.x及以上版本,执行以下命令即可升级:
pacman -S mingw-w64-x86_64-gcc - 临时规避方案:如果暂时无法升级,可去掉编译命令中的
-g参数(生成调试信息的选项),此时编译器会正确显示错误行号,但无法生成调试符号。
内容的提问来源于stack exchange,提问作者Symlink
相关产品推荐
相关产品推荐

