MinGW-w64 编译通过运行崩?Code Runner 踩坑记
症状 VS Code 里写了个 hello world: #include <iostream> using namespace std; int main() { cout << "Hello world!" << endl; return 0; } Ctrl+Alt+N(Code Runner)→ 编译通过 → 运行崩: [Done] exited with code=3221225477 in 1.097 seconds 退出的 3221225477 就是 0xC0000005,也就是 STATUS_ACCESS_VIOLATION——俗称段错误(segfault)。 一个 hello world 能 segfault,说明问题不在代码,在环境。 排查 第一坑:路径错了 看看编译器的实际位置: $ ls /d/Apps/mingw64/mingw64/bin/g++.exe 结果是 MinGW-w64 15.2.0(UCRT 版本),而我 Code Runner 里配的是 D:\Apps\TDM-GCC\bin\g++.exe——一个根本不存在的目录。 嗯,之前不知道哪个助手写进记忆里的,信了。 第二坑:运行时缺 DLL 路径改对后,编译确实过了,但运行还是崩。手动跑一下试试: $ g++ hello.cpp -o hello.exe -static-libgcc -fexec-charset=gbk $ ./hello.exe Segmentation fault 查一下编译产物依赖的 DLL: $ objdump -p hello.exe | grep "DLL Name" DLL Name: libstdc++-6.dll DLL Name: KERNEL32.dll DLL Name: api-ms-win-crt-environment-l1-1-0.dll DLL Name: api-ms-win-crt-heap-l1-1-0.dll ... 看到了吧——libstdc++-6.dll。这个 DLL 在 MinGW 的 bin 目录下,但不在系统的 PATH 里。运行时找不到它,直接崩。 ...