今天晚上,首先打算创建一个SDL的窗口,但是没有想到第一步就出现问题了,出现问题的代码如下:
1 #include <iostream> 2 #include <SDL/SDL.h> 3 4 int window_width = 640; 5 int window_height = 480; 6 7 extern int test_start(); 8 9 int main() 10 { 11 test_start(); 12 SDL_Quit(); 13 return 0; 14 } 15 16 int test_start() 17 { 18 SDL_Init(SDL_INIT_VIDEO); 19 SDL_Surface* screen = SDL_SetVideoMode(window_width, window_height, 0, SDL_HWSURFACE | SDL_DOUBLEBUF); 20 SDL_WM_SetCaption( "hello", 0 ); 21 return 0; 22 }
然后编译就已经无法通过了,给出的错误提示是如下:
E:\program files\CodeBlocks\MinGW\lib\libSDLmain.a(SDL_win32_main.o)||In function `console_main':|
\Users\slouken\release\SDL\SDL-1.2.15\.\src\main\win32\SDL_win32_main.c|315|undefined reference to `SDL_main'
看到爆出这个错误,我第一反应就是忘记添加链接选项,我打开工程设置一看,果然忘记添加链接选项了。
果断在“其他链接选项”中添加如下链接:
-lmingw32 -lSDLmain -lSDL.dll -luser32 -lgdi32 -lwinmm -ldxguid -mwindows
本以为这样应该问题得以解决,但是没有想到再次编译,依旧爆出同样的错误,这个可就让我想不通问题出现在哪里了。
百思不得其解(一说道这个词,就让我想起一款手机应用《百思不得姐》,里面的段子和图片挺有意思的)之下,我祭出百度大法,最终找到了答案。原来问题出在主函数中,没想到如果想使用SDL的话,主函数中的参数需要添加上。
现在修改代码,修改过的代码如下:
1 #include <iostream> 2 #include <SDL/SDL.h> 3 4 int window_width = 640; 5 int window_height = 480; 6 7 extern int test_start(); 8 9 int main(int argc, char* argv[]) 10 { 11 test_start(); 12 return 0; 13 } 14 15 int test_start() 16 { 17 SDL_Init(SDL_INIT_VIDEO); 18 SDL_Surface* screen = SDL_SetVideoMode(window_width, window_height, 0, SDL_HWSURFACE | SDL_DOUBLEBUF); 19 SDL_WM_SetCaption( "hello", 0 ); 20 SDL_Quit(); 21 return 0; 22 }
OK,这次编译没有问题,一次通过……
不过现在的窗口也是一闪而过,所以我就直接上了一个死循环,所以主函数部分就变成了这个样子(千万不要执行,我可是一下就掉进坑里了……):
1 int main(int argc, char* argv[]) 2 { 3 while(1) 4 { 5 test_start(); 6 } 7 return 0; 8 }
总之,这样很坑……
所以,这种事情还是不要这样搞了……
为了让窗口能够停留在桌面上,我们可以暂时的使用一个SDL_Delay()函数来做到这一点。将test_start()改成下面这样子:
1 int test_start() 2 { 3 SDL_Init(SDL_INIT_VIDEO); 4 SDL_Surface* screen = SDL_SetVideoMode(window_width, window_height, 0, SDL_HWSURFACE | SDL_DOUBLEBUF); 5 SDL_WM_SetCaption( "hello", 0 ); 6 SDL_Delay(5 * 1000); 7 SDL_Quit(); 8 return 0; 9 }
在SDL_Delay()中,参数是以ms作为单位的,所以这里乘以1000,使其变成s。
本文参考:
用SDL创建一个窗口:http://blog.csdn.net/jiazhen/article/details/2322701
[Linker error] undefined reference to SDL_main':http://www.gamedev.net/topic/332647-linker-error-undefined-reference-to-sdl_main/