我开发了一个SDL2应用程序,以便在Linux上获得乐趣,但我也为非Linux用户进行Windows构建,即使没有测试它(我根本没有Windows,从来没有)。我使用mingw,交叉编译。一切都很好,但有一点。该应用程序还有一些命令行开关/消息/帮助以及使用C中的简单printf()。然而,根据用户的说法,这在Windows上根本不起作用,没有显示输出。我发现了这个:setvbuf (stdout, NULL, _IONBF, 0);
但它没有帮助。另外,我在各种文档和-mwindows
中找到了-mconsole
mingw的切换,但由于我不熟悉Windows,我不知道对我这个奇怪的系统应该如何工作(Windows) 。基本上我想要与Linux类似的解决方案:如果你从终端窗口开始,你可以看到标准输出,但如果没有,它们根本看不到,没有窗口打开/显示这些消息等。
答案 0 :(得分:2)
我知道没有与Linux程序具有相同行为的windows替代方案。
如果没有-mwindows
(除了许多其他内容),您的输出将被定向到stdout并显示在cmd中(并且可以通过管道路由到其他进程stdin),但如果您将在没有cmd的情况下运行它 - 它将为输出打开一个额外的控制台窗口。
-mwindows
stdio不再链接到控制台。您仍然可以重定向输出,但是您没有看到它(因此,例如your_program.exe | cat
将显示输出,但标准窗口中没有cat
。但是,此模式不会自动打开控制台窗口。您可以手动创建控制台(或继承父进程的控制台)并将stdout重定向到它(使用freopen("CONOUT$", "w", stdout)
),但这不是'true'stdio并且您无法将其传递给其他进程(可能仍然对你没问题。)