我运行此程序,在控制台中看不到任何输出,并立即终止。我做错了什么?
代码:
#include <iostream>
#include <SDL/SDL.h>
using namespace std;
int main(int argc, char *argv[]) {
//The images
cout << "Hello World" << endl;
SDL_Surface* hello = NULL;
SDL_Surface* screen = NULL;
//Start SDL
SDL_Init( SDL_INIT_EVERYTHING );
//Set up screen
screen = SDL_SetVideoMode( 640, 480, 32, SDL_SWSURFACE );
//Load image
hello = SDL_LoadBMP( "heldlo.bmp" );
//Apply image to screen
SDL_BlitSurface( hello, NULL, screen, NULL );
//Update Screen
SDL_Flip( screen );
//Pause
SDL_Delay( 20000 );
//Free the loaded image
SDL_FreeSurface( hello );
//Quit SDL
SDL_Quit();
return 0;
}
使用minGW,传递库:
的mingw32 SDLmain SDL
主要方法的签名似乎是正确的,就像这里:simple tcp echo program not working when SDL included?
或者在这里,它表明链接器子系统必须是控制台: http://www.gamedev.net/topic/376205-defeating-sdl-linker-errors-in-visual-studio-net/
所以我试过传递
-Wl,--subsystem,console -mconsole
到编译器和链接器。这构建和启动,与以前相同,没有输出,没有窗口。
对我而言,通过选项控制台是没有意义的,因为,我实际上想要看一个窗口,但我是一个完整的菜鸟,所以我不知道。只需阅读人们说SDL需要使用控制台选项运行程序,或者将主方法更改为WinMain
。但他们也说这没有意义,SDL应该与main
一起运行。
我还做了一个测试,将“windows”而不是“console”传递给链接器和编译器,也没有成功(它的行为相同)。
我也不明白为什么我在控制台中看不到输出。如果我删除所有SDL内容(特别是include),它将显示输出。由于它也执行得非常快,我的主要方法可能根本没有被执行。
任何帮助......?
答案 0 :(得分:1)
SDL将标准输出重定向到文件(stdout.txt,IIRC)。您应该在运行程序的目录中找到它。
检查SDL_SetVideoMode()
的返回值,它必须是非NULL。您的系统可能不支持640x480等分辨率。