控制台输出(stdio)在使用mingw32交叉编译的Windows上不起作用

时间:2016-03-26 13:05:00

标签: c windows cross-compiling mingw32 windows-console

我远不是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()的来电,修改订单等,但它没有帮助。

0 个答案:

没有答案