【问题标题】:Undefined reference to WinMain@16 when using SDL使用 SDL 时未定义对 WinMain@16 的引用
【发布时间】:2013-08-07 22:54:26
【问题描述】:

我在让一切正常工作时遇到了很多麻烦,以便我可以开始在 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图形程序时使用的main函数,但在我过去更多地在Windows下开发时,这对我来说从来都不是问题。

【问题讨论】:

    标签: c windows sdl winmain


    【解决方案1】:

    我稍微搜索了有关此错误的更多信息,并找到了this page,其中包括以下信息:

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

    -lmingw32 -lSDLmain -lSDL
    

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

    尝试使用上面的那些标志重新编译,看看是否会有所不同。

    【讨论】:

    • +1 以获得完整但简洁的答案。 -lmingw32 似乎可有可无,但事实并非如此!
    猜你喜欢
    • 2015-11-27
    • 2013-06-07
    • 2021-11-18
    • 2013-01-15
    相关资源
    最近更新 更多