#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'
我通过在main()函数中添加参数来修复SDL_main错误,例如:
#include <iostream>
#include "SDL.h"
using namespace std;
int main(int argv, char** args) {
cout << "hello world" << endl;
return 0;
}
我可以毫无问题地编译和运行程序。但我无法在屏幕上看到“hello world”消息。如果我注释掉SDL.h包含行,我确实看到了消息。问题是什么 ?
答案 0 :(得分:0)
Windows在“控制台”和“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
不再连接到GUI应用程序的控制台,因此您不会在控制台中看到它,但是您将在调试器中使用它,或者您将重定向{{ 1}}到其他地方,例如:
stdout
通过将> a.exe | more
hello world
/ stdin
重定向到stdout
和CONIN$
,也可以在应用程序端处理控制台输出,但这样我认为你将失去重定向呼唤方的能力。