2015-01-31 1 views
3

Так что я использую SDL2, построенную как статическую библиотеку, на Windows 64bit. И SDL2 останавливает ваш stdout и stderr от входа в консоль.SDL2 на Windows крадет мой stdout и stderr

Теперь я прочитал FAQ. Но:

  • символ NO_STDIO_REDIRECT для SDL1.2 только, и не используется в SDL2.
  • freopen() трюк не работает, в любом заклинании.
  • Я связываю свое приложение как консольное приложение.
  • Я не связываюсь с библиотекой удобства SDL2main.

Я использую визуальный C от комплекта 2013 года в командной строке. Это мой линкер invokation:

link.exe /OUT:giver.exe/SUBSYSTEM: CONSOLE/NOLOGO с: /Users/bram/Desktop/src/opende/lib/Release/ode.lib C:/Пользователи/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

Тем не менее, не выход станд для меня. Как я могу остановить SDL2 от кражи моего вывода?

+0

Вы когда-нибудь находили ответ на этот вопрос? –

+1

Я отказался от интерфейса командной строки и капитулировал. Теперь я использую проект визуальной студии. Я не узнал, что случилось. – Bram

ответ

0

Я создал простую программу SDL2 и использовал default x64 SDL2.0.3 VC .lib/.dll's, который можно найти на libsdl.org и удалось скомпилировать с VS2013 на Win7 x64 и получить консольный вывод с помощью 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