c++ - vs2017工作负载 - vs运行cpp




你如何得到一个最小的SDL程序编译和链接在Visual Studio 2008 Express? (2)

我目前没有VC ++,但是我多次看到这个问题。

您需要创建一个Win32项目,而不是一个控制台项目。 Win32项目需要一个WinMain函数作为程序入口点。 SDLmain.lib包含此入口点和SDL_main.h头文件有一个宏,将您的主函数重新映射到SDL_main。 该函数由SDLmain库中的入口点调用。

主要功能必须具有以下签名:

int main(int argc, char *argv[])

在声明主函数之前还需要包含SDL.h,并且需要链接到SDL.lib和SDLmain.lib。

看起来你正在这样做。 所以,我的猜测是你有一个控制台项目设置。 因此, 链接器正在寻找一个主函数来调用,但是它正在通过宏SDL_main.h重新映射到SDL_main 。 所以,链接器无法找到入口点并放弃!

我试图在Visual Studio 2008 Express中使用C ++中的SDL。 以下程序编译但不链接:

#include <SDL.h>

int main(int argc, char *argv[])
{
    return 0;
}

链接错误是:

LINK : fatal error LNK1561: entry point must be defined

无论如何或如果我与SDL.lib和SDLmain.lib链接,我都会得到这个结果。 将main定义为main()SDL_main()会给出相同的错误,有或没有extern "C"

编辑:我解决了这个不包括SDL.h在main.cpp - 一个重构,我做了独立的问题。 在定义函数之前,类似的解决方案是#undef main


链接器找不到入口点。 这意味着你的main()函数不被识别为入口点。

如果您有.def文件,请将其删除。

另外,如果你已经设置了你的项目,使用unicode而不是mbcs编译,你必须使用wmain()而不是main()。







sdl