SDL闹腾(一):SDL有关main函数的问题(第一天开始瞎折腾……)

今天晚上,首先打算创建一个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/

 

转载于:https://www.cnblogs.com/dmbird/p/3329353.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值