What is SDLMain.m? Do I need it? Why is _main undefined?

Just like main() is the entry point for C programs (inc. C++, Objective-C, and Objective-C++), SDL_main() is the main entry point for SDL programs. However, you don't actually write an SDL_main() function. The header file "SDL_main.h" remaps your main() function to the SDL_main() function with a function macro. Your SDL_main() function is called after the code in SDLMain.m has performed the required "bootstrap" initializations to support the SDL runtime.

There are three things you have to do:

  1. You must include either SDLMain.m/.h or libSDLmain in your application, because this is the code that defines SDL's entry point. If you fail to do this, it is likely that "_main undefined" will be thrown by the linker.

  2. You must give your main() procedure the following prototype:

     int main(int argc, char*argv[]);
  3. You must make sure the file containing your main() procedure #includes SDL.h.

Otherwise, the macro will not remap main() to SDL_main(), you will get an undefined _main error, or the bootstrap process will not run, and SDL will behave strangely or your application will crash or hang.

FAQ_MacOS_X_SDLMain.m (last edited 2008-04-17 08:18:33 by localhost)