我远不是Windows程序员,甚至不是Windows用户,但现在我应该使用mingw32将应用程序交叉编译到Windows。我的问题:控制台输出不起作用。它是一个使用-mwindows
编译的GUI应用程序。我试图使用AllocConsole()
确实产生了一个控制台窗口,但仍然没有来自printf()
和朋友的输出。我还尝试在名称freopen()
上使用CONOUT$
,同时使用/不使用setvbuf(stdout, NULL, _IONBF, 0)
。这些可以提供帮助,但在控制台窗口中根本没有输出。现在我感到迷茫,因为我无法想象我能做些什么,甚至MSDN页面似乎都同意我做正确的事情(如果我正确地阅读它们),但仍然没有输出:(
#include <stdio.h>
#include <windows.h>
int main ( void )
{
FreeConsole(); // just to be sure we had no console before
AllocConsole();
// SetConsoleTitle("Test console");
freopen("CONOUT$", "w", stdout);
setvbuf(stdout, NULL, _IONBF, 0);
printf("Hello, world!\n");
sleep(10);
return 0;
}
简单编译(在Linux上):i686-w64-mingw32-gcc -o test.exe test.c -mwindows
请注意,问题存在于更复杂的软件中。在这个例子中,我可以选择使用控制台应用程序而不是GUI,但我遇到的问题是SDL2应用程序,否则它不能成为控制台应用程序,我也需要控制台。上面的代码只是一个测试用例。我还尝试评论freopen()
和setvbuf()
的来电,修改订单等,但它没有帮助。