0

我正在使用 Ogre3D 开发一个项目。我们最近将我们的项目移植到了 MacOSX,但有些东西与 Windows API 相关联。特别是我不知道应该如何翻译:

#if defined( __WIN32__ ) || defined( _WIN32 )
    AllocConsole();
#endif

有朝一日将项目移植到 Linux 下会很好,那么是否有与 Unix 兼容的方式来为标准输出/输入分配控制台?

谢谢

4

1 回答 1

3

从 UNIX 的角度来看,因为我在特定于 Mac 的开发方面没有那么丰富的经验。

默认情况下,控制台是“分配的”。但是,您不能命令操作系统打开控制台。您可以告诉您正在使用的 IDE 在终端中打开它,或者,如果它支持,将您当前的应用程序创建为控制台应用程序,尽管使用的是 GUI。

我说控制台是默认分配的是什么意思?每个进程实际上都从调用进程中获取了它的stdin,stdoutstderr(文件标识符 0、1 和 2)。因此,除非调用进程(bash、Finder 等)方便地忘记它们保持打开状态,否则您总是会打开一个控制台……但也许是不可见的?

获取控制台的最简单方法是从终端启动应用程序,就像 Finder 从 GUI 启动应用程序一样。请记住,.apps 实际上是文件夹:

/projects/myapp$ ./BuiltApplication.app/Contents/MacOS/BuiltApplication

Finder 将当前工作目录设置为 .app 包所在的文件夹,所以上面的模拟效果最好。

此外,请查看/Applications/Utilities/Console.appMacOS 附带的控制台应用程序。控制台通常用于查看 stdout 和 stderr。由于我不在 Mac 上,因此我无法对此进行测试,但实际上我发现一些消息来源说 stdout 和 stderr 应该在那里重定向。看到这个帖子

您可以使用 Console.app 查看以正常方式启动的应用程序的输出,因为启动基础设施专门将它们的stdout和发送到stderr那里。您还可以使用asl例程来查询日志,或者如果您愿意,可以执行更复杂的日志记录。

于 2009-10-06T19:45:09.130 回答