【问题标题】:undefined reference to `WinMain@16' collect2.exe: error: ld returned 1 exit status未定义对“WinMain@16”collect2.exe 的引用:错误:ld 返回 1 退出状态
【发布时间】:2013-06-01 12:42:54
【问题描述】:

我正在使用 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

请帮我解决这个问题。

【问题讨论】:

  • 这看起来不像整个程序。 WinMain 在哪里?
  • 他没有WinMain - 这就是他得到错误的原因。

标签: c eclipse x86 mingw winmain


【解决方案1】:

您的程序不完整。您需要实现操作系统预期的入口点。在您的情况下,它看起来像是称为WinMain

【讨论】:

  • 是的,我想通了。我需要实现 main()。谢谢。
【解决方案2】:

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

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

希望这会有所帮助,因为我遇到了类似的问题,我花了大约几个小时才弄清楚, 谢谢

【讨论】:

  • 你的天真回答被低估了xD
【解决方案3】:
  1. 缺少main() 函数。
  2. 将此代码另存为某个新文件。再次运行编译代码。
  3. 检查PATH 环境变量。

【讨论】:

  • 我不确定这是不是这个原因。 WinMain想编译成GUI程序,对于控制台程序,只有简单的main()
  • 不知何故这对我有用,编译file.cpp 给了我这个错误但是当我将相同的代码复制到另一个文件index.cpp 并编译它时。它工作得很好。我的代码只是 iostream 标头、主函数和“hello world”的 cout 语句
【解决方案4】:

在 VS Code 中,当您尚未保存代码时,可能会发生这种情况。点击Ctrl + s保存代码,然后再次运行程序。

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

【讨论】:

  • @JanakaEkanayake - 你大大改变了这个答案。它正在谈论某种在构建/运行之前自动触发的自动保存选项,但是您将其更改为仅谈论使用键盘快捷键手动保存。除非您知道没有这样的功能,否则这不是一个好的编辑。 (原版可以使用一些清理,但不会改变关键点。)
  • @PeterCordes 我同意你的意见,感谢您的更正
【解决方案5】:

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

【讨论】:

  • 我猜 args 必须准确,所以 @16 装饰(__stdcall 函数要弹出的字节数)将匹配 CRT 正在寻找的内容。 Callee-pops 依赖于被调用者准确地声明它的参数。
【解决方案6】:

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

【讨论】:

  • 多个现有答案已经说明了这一点,包括一个提到ctrl + s。请不要发布“我也是”的答案;为对您有用的现有答案投票。
  • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
猜你喜欢
  • 2014-09-03
  • 2021-08-04
  • 2020-10-04
  • 1970-01-01
  • 2020-05-06
  • 1970-01-01
  • 1970-01-01
  • 2012-08-02
  • 2012-02-18
相关资源
最近更新 更多