2015-01-31 75 views
3

因此,我使用SDL2,构建为Windows 64位上的静态库。 SDL2会阻止您的stdout和stderr到达控制台。Windows上的SDL2窃取了我的标准输出和stderr

现在,我读了FAQ这个。 但是:

  • NO_STDIO_REDIRECT符号仅适用于SDL1.2,并未在SDL2中使用。
  • freopen()技巧不起作用,任何咒语。
  • 我将我的应用程序作为控制台应用程序链接。
  • 我不链接到SDL2main便利库。

我在命令行中使用2013套件中的visual C。 这是我的链接invokation:

LINK.EXE /OUT:giver.exe /子系统:CONSOLE/NOLOGO C:/Users/bram/Desktop/src/opende/lib/Release/ode.lib C:/ Users/bram/Desktop/src/SDL2-2.0.3/VisualC/S DL/x64/Debug/SDL2.lib winmm.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32。 LIB SHELL32.LIB ole32.lib oleaut32.lib UUID.LIB odbc32.lib odbccp32.lib version.lib imm32.lib OpenGL32.lib sdlmain.obj gl3w.obj libpi.lib libbase.lib

然而,没有STD输出为了我。 我该如何阻止SDL2窃取我的输出?

+0

你有没有找到一个答案? – 2015-04-10 23:13:25

+1

我放弃了命令行界面,并投降。现在我使用一个视觉工作室项目。我从来没有发现什么是错的。 – Bram 2015-04-12 18:13:11

回答

0

我创建了一个简单的SDL2程序,并使用可从libsdl.org找到的default x64 SDL2.0.3 VC .lib/.dll's,并在Win7 x64上使用VS2013进行编译,并使用printf/SDL_Log获取控制台输出。希望这有助于。

这里的程序:

#include <SDL2/SDL.h> 
#include <stdio.h> 

int main(int argc, char** argv) 
{ 
    SDL_Init(SDL_INIT_VIDEO); 
    SDL_Window* window = SDL_CreateWindow("SDL2 Test", 
             SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 
             800, 600, SDL_WINDOW_SHOWN); 

    SDL_Surface* screenSurface = SDL_GetWindowSurface(window); 

    SDL_FillRect(screenSurface, NULL, SDL_MapRGB(screenSurface->format, 0x0c, 0xd6, 0xe8)); 
    SDL_UpdateWindowSurface(window); 

    printf("printf: Hello World\n"); 
    SDL_Log("SDL_Log: Hello World\n"); 

    SDL_Delay(2500); 

    SDL_DestroyWindow(window); 
    SDL_Quit(); 
    return 0; 
} 

以下是我编(更改包括适当/链接目录):

cl hello_SDL2.cpp /MD /I C:\vs_sdl\include /link C:\vs_sdl\lib\x64\SDL2.lib C:\vs_sdl\lib\x64\SDL2main.lib /SUBSYSTEM:CONSOLE 

程序带来了几秒钟的窗口,并输出以下控制台:

printf: Hello World 
SDL_Log: Hello World 
相关问题