对`WinMain@16'collect2.exe的未定义引用:错误:ld返回1退出状态

问题描述 投票:0回答:9

我正在使用 eclipse CDT 来测试 Intel 指令,下面是我的程序:

#define cpuid(func,ax,bx,cx,dx)\
__asm__ __volatile__ ("cpuid":\
 "=a" (ax), "=b" (bx), "=c" (cx), "=d" (dx) : "a" (func));
int Check_CPU_support_AES()
 {
 unsigned int a,b,c,d;
 cpuid(1, a,b,c,d);
 return (c & 0x2000000);
 }

当我编译上面的代码时,我得到链接错误:

Info: Internal Builder is used for build
gcc -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\Intel.o" "..\\src\\Intel.c" 
gcc -o Intel.exe "src\\Intel.o" 
c:/mingw/bin/../lib/gcc/mingw32/4.7.2/../../../libmingw32.a(main.o):main.c:(.text.startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status

请帮助我解决这个问题。

c eclipse x86 mingw winmain
9个回答
15
投票

您的程序尚未完成。您需要实现操作系统预期的入口点。在你的例子中,它看起来像是被称为

WinMain


9
投票

是的,缺少Main()函数,编译器无法找到执行程序的入口点。

还有一个原因是,即使你写了 main 函数,但如果你没有保存 .cpp 文件并尝试编译它,也会给出同样的错误。所以请确保你已经成功保存 .cpp 文件,然后编译并运行你的代码。

希望这会有所帮助,因为我也遇到过类似的问题,并且我花了大约几个小时来解决它, 谢谢


5
投票
  1. 缺少
    main()
    功能。
  2. 将此代码另存为某个新文件。再次运行编译代码。
  3. 检查
    PATH
    环境变量。

3
投票

在 VS Code 中,当您尚未保存代码时可能会发生这种情况。单击

Ctrl + s
保存代码,然后再次运行程序。

或者要自动执行此操作,请转到设置并搜索“保存”。向下滚动并搜索“运行前是否保存当前文件”并启用。


2
投票

您必须先保存文件>> Ctrl + s


1
投票

如果您已经检查了所有其他原因

我也收到了这条消息,结果发现我不小心将 main() 放在了命名空间中。因此它被隐藏以供全球访问


0
投票

main()
替换为
main(int argc,char **argv)
,它对我有用。


0
投票

在VS代码中,先保存文件


0
投票

当我遇到这个错误时,是因为我忘记了实际添加文件名。

© www.soinside.com 2019 - 2024. All rights reserved.