Программа SDL Hello World не выводит сообщение - PullRequest
0 голосов
/ 18 мая 2018
#include <iostream>
#include "SDL.h"
using namespace std;

int main() {
    cout << "hello world" << endl;
    return 0;
}

Ошибка

17:23:46 **** Incremental Build of configuration Debug for project SDL2_program_59 ****
Info: Internal Builder is used for build
g++ "-ID:\\SDL2_inc_lib\\SDL2-2.0.8\\i686-w64-mingw32\\include\\SDL2" -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\SDL2_program_59.o" "..\\src\\SDL2_program_59.cpp" 
g++ "-LD:\\SDL2_inc_lib\\SDL2-2.0.8\\i686-w64-mingw32\\lib" -o SDL2_program_59.exe "src\\SDL2_program_59.o" -lmingw32 -lSDL2main -lSDL2 
D:\SDL2_inc_lib\SDL2-2.0.8\i686-w64-mingw32\lib/libSDL2main.a(SDL_windows_main.o): In function `main_utf8':
/Users/slouken/release/SDL/SDL2-2.0.8-source/foo-x86/../src/main/windows/SDL_windows_main.c:126: undefined reference to `SDL_main'
/Users/slouken/release/SDL/SDL2-2.0.8-source/foo-x86/../src/main/windows/SDL_windows_main.c:126: undefined reference to `SDL_main'

Я исправил ошибку SDL_main, добавив аргумент в функцию main (), например:

#include <iostream>
#include "SDL.h"
using namespace std;

int main(int argv, char** args) {
    cout << "hello world" << endl;
    return 0;
}

Я могу без проблем скомпилировать и запустить программу,Но я не вижу сообщение «Привет, мир» на экране.Если я закомментирую строку включения SDL.h, я увижу сообщение.В чем проблема ?

1 Ответ

0 голосов
/ 18 мая 2018

В Windows есть большое различие между приложениями 'console' и 'GUI'.Последние SDL2 могут справиться с обоими, но в конечном итоге именно компоновщик решает, какой тип приложения у вас есть.С gcc / mingw он управляется переключателями -mconsole и -mwindows.Например, с вашим исходным кодом:

> g++ test.cpp -lmingw32 -lSDL2main -lSDL2 -mconsole
> a.exe
hello world
> g++ test.cpp -lmingw32 -lSDL2main -lSDL2 -mwindows
> a.exe
>

Выход все еще там, но stdout больше не подключен к консоли для приложения с графическим интерфейсом, поэтому вы не увидите его в консоли, но выиспользуйте его в отладчике или перенаправьте stdout в другое место, например:

> a.exe | more
hello world

Можно также обрабатывать вывод консоли на стороне приложения, перенаправляя stdin / stdout на CONIN$ и CONOUT$, но таким образом, я полагаю, вы потеряете способность перенаправления на вызывающей стороне.

...