->Shockwave - the problem with Linux is it's more complicated to get the display going, and although Auld/Rbraz's stuff is very small it doesn't solve that specific problem because it's meant for Windows.
The problem here is really Linux specific, at least, I think it is, I'm still not sure I'm right because the way Linux loads programs and links them is very different to Windows.
->frea - try adding a sprintf function to your main.c, something like
int sprintf(char *buffer, const char *fmt, ...)
{
...
}
Then try a breakpoint inside sprintf to see how much of it you might need to write, based on what fmt is set to. At least that might show you the problem - either the linker will complain you have 2 sprintf functions defined, or you'll find something else

Under Linux, is there really any benefit from removing the C runtime from your program, seeing as it can always be dynamically linked?
Another question - how do you know you can get rid of SDL_init()?
Jim