使用SDL时出现WinMain@16未定义的引用问题

9

我一直在尝试在Windows上进行开发,而不是像平时编码时使用的Linux,但是我遇到了很多麻烦。当我尝试编译一个SDL程序时,出现了一个非常奇怪的问题。只要我包含了SDL库,程序就无法编译,并给出以下错误:

c:/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../libmingw32.a<main.o>: In function 'main':
C:\MinGW\msys\1.0\src\mingwrt/../mingw/main.c:73: undefined reference to 'WinMain@16'
collect2: ld returned 1 exist status

我正在控制台上使用MinGW。

举例来说,使用以下命令:

gcc -o test main.c

这个编译很顺利:

#include <stdio.h>
#include <stdlib.h>

int main(int argv, char **argc)
{
    printf("Hello, world!\n");

    return 0;
}

但是,只要我添加了#include(即使没有调用任何SDL函数),我就会出现上述错误。
使用:
gcc -o test main.c -lSDL

这段代码编译失败:

#include <stdio.h>
#include <stdlib.h>

#include <SDL/SDL.h>

int main(int argv, char **argc)
{
    printf("Hello, world!\n");

    return 0;
}

任何帮助都将不胜感激!我读到过这是一个常见问题,对于那些忘记有主函数的人来说,但显然这不是我的问题。我还听说WinMain是处理Windows图形程序时使用的主函数,但过去当我更多地在Windows上开发时,这从未成为问题。

1个回答

15

我对这个错误进行了一些搜索,找到了 这个页面,其中包含以下信息:

现在让它编译的唯一技巧就是添加包含路径(例如:-I../SDL/include),链接器路径(例如:-L../SDL/lib),然后按正确顺序添加库。使用:

-lmingw32 -lSDLmain -lSDL

另外,如果你的IDE没有自动添加-mwindows标志(除了任何其他你想链接的库),不要忘记添加它。如果你没有按正确的顺序放置它们,你将收到一个链接错误,抱怨缺少符号WinMain@16。

尝试使用上述标志重新编译,看看是否有所改善。


完整而简洁的答案加1分。-lmingw32似乎是可有可无的,但实际上它是必需的! - Syndog

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接