Eclipse CDT错误:对于来自C的控制台应用程序的未定义的“WinMain @ 16”引用 - >空项目 - 如何解决?

时间:2014-12-04 02:29:29

标签: eclipse-cdt

我正在Eclipse CDT中做一个Hello World C项目。我做到了 档案 - >新 - > C项目 - >可执行 - >空项目

当我编译它时会给出一个链接错误,我认为这意味着它认为我正在做一个Windows GUI程序,因为它想要winmain @ 16:

CDT Build Console(HelloWorld)

17:54:23 **** Incremental Build of configuration Debug for project HelloWorld ****
Info: Internal Builder is used for build
gcc -o HelloWorld.exe HelloWorld.o 
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../libmingw32.a(main.o):main.c:(.text.startup+0xa7): undefined reference to `WinMain@16'
collect2.exe: error: ld returned 1 exit status
17:54:23 Build Finished (took 381ms)

我的问题 - 如果可能的话,如何更改项目的选项,不想要winmain @ 16?

我发现我可以在Project Explorer中右键单击项目名称并从菜单中选择Properties,但我看不到任何可执行类型 - 控制台与GUI。

1 个答案:

答案 0 :(得分:0)

首先(最好)猜测:你在编译前保存了你的来源?默认情况下,Eclipse在编译之前不保存缓冲区,您必须在选项中明确说明。您的编译器输出应该提到它实际编译源代码,如下所示:

Info: Internal Builder is used vor build
gcc -O3 -Wall -c -fmessage-length=0 -o main.o "..\\main.c"
gcc -o HelloWorld.exe main.o

您提供的消息不包含该消息,但您可能是在较早的尝试中编译了源代码。

我创建了一个像你一样的空C项目,使用MinGW 4.5.8和gcc的链接器接受两种方式来定义主要功能:

#include <stdio.h>

int main (int argc, char ** argv) { printf("Hello World!\n"); return 0; }

#include <stdio.h>
#include <windows.h>

int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { 
  printf("Hello World!\n");
  return 0;
}

如果这没有帮助,那么Eclipse社区可能会在http://www.eclipse.org/forums/index.php/t/153059http://www.eclipse.org/forums/index.php/t/67342提到一些能激发你灵感的东西。

类似问题: eclipse + cdt + mingw + windows error "undefined reference to `WinMain@16'" on buildundefined reference to WinMain Error 1 in eclipse using mingw