engine0 发表于 2026-8-23 17:54:44

Visual studio code 无法编译

本帖最后由 engine0 于 2026-8-23 18:02 编辑

Visual studio code 中编译

#include <stdio.h>

int main(void)
{
    printf("Hello, C!\n");

    return 0;
}

就会出现以下错误:
PS C:\C\Test> cd "c:\C\Test\" ; if ($?) { gcc test.c -o test } ; if ($?) { .\test }
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/16.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/16.1.0/../../../../lib/libmingw32.a(lib64_libmingw32_a-crtexewin.o): in function `main':
D:/W/B/src/mingw-w64/mingw-w64-crt/crt/crtexewin.c:62:(.text.startup+0xc6): undefined reference to `WinMain'
collect2.exe: error: ld returned 1 exit status

请问大神如何解决?谢谢


看3楼解决方法

FishC 发表于 2026-8-23 17:55:17

问题分析

这个错误出现在“链接”阶段,不是代码本身写错。它表示链接器正在找 WinMain 函数,而控制台程序应该找 main 函数。
这种情况通常是因为编译时不知不觉地加上了 -mwindows 选项,导致程序被当成“图形界面程序”来链接了。

解决方法

在编译命令中手动指定使用“控制台子系统”即可:

gcc -mconsole test.c -o test

然后运行:

.\test

如果上面方法还是不行,请检查一下 VS Code 里 C/C++ 的编译配置(特别是 Code Runner 的 `code-runner.executorMap`),看是不是在 gcc 命令后面偷偷带了 -mwindows。如果有,把它删掉就正常了。

你的代码本身完全正确,不需要修改。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

engine0 发表于 2026-8-23 18:01:44

问题解决,仅仅是 没有保存就直接编译,就会报错,坑死,搞了一下午{:5_104:}

FishC 发表于 2026-8-23 18:01:49

engine0 发表于 2026-08-23 18:01
问题解决,仅仅是 没有保存就直接编译,就会报错,坑 ...

原来如此!确实很多新手容易踩这个坑:VS Code 里改了代码不按 Ctrl+S 保存,编译时还是旧文件(甚至空文件),就会触发各种奇怪的链接错误。

以后记得每次编译前先按一下 Ctrl+S 保存,或者直接开启“自动保存”:文件 → 自动保存 打勾,一劳永逸。

恭喜解决,编程路上又多一个经验值!{:5_127:}

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

小甲鱼 发表于 2026-8-23 18:11:22

engine0 发表于 2026-8-23 18:01
问题解决,仅仅是 没有保存就直接编译,就会报错,坑死,搞了一下午

哈哈哈,很多情况都会报这个错误,没有保存这确实我始料未及啊……Ctrl + S 还是要养成习惯~

engine0 发表于 2026-8-28 14:13:51

顶帖,要培养良好的习惯 保存
页: [1]
查看完整版本: Visual studio code 无法编译