undefined reference to WinMain@16 C++, SDL-2

删除回忆录丶 提交于 2019-11-30 15:06:28

I think you want

#define SDL_MAIN_HANDLED

in your main file, BEFORE the line

#include <SDL2/SDL.h>

Explanation:

In SDL / SDL2, in an effort to try to make cross-platform development of certain kinds of applications simpler, SDL creates a custom "entry-point" to your application. That is, your int main() is not the real main. What happens is, main is defined as a macro in the SDL header and this causes your main to be renamed to SDL_main or similar. Then, in the "SDL_main" library a different main is defined which will be the real main of your application. This main just fetches the command-line arguments in whatever way is appropriate for the platform, and calls your main (which was renamed SDL_main).

On windows, there are also some differences regarding whether your application is started as a console program vs. as a gui program, iiuc.

Sometimes you want SDL to do these things for you, but if you are developing a traditional console program, usually you don't. So you pass SDL this SDL_MAIN_HANDLED define in order to prevent from doing all this stuff.

The #undef main approach will work also, but it's not quite as good because this way, you tell SDL what is going on, with the other method, SDL thinks that all it's stuff is going to be used and in fact you crudely disable it with #undef later.

If you want to see details of the various macros / platform checks, you can look in the SDL_main.h header. If you want to know what the benefits of the SDL main system are, you can look at SDL documentation.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!