我正在使用 Ogre3D 开发一个项目。我们最近将我们的项目移植到了 MacOSX,但有些东西与 Windows API 相关联。特别是我不知道应该如何翻译:
#if defined( __WIN32__ ) || defined( _WIN32 )
AllocConsole();
#endif
有朝一日将项目移植到 Linux 下会很好,那么是否有与 Unix 兼容的方式来为标准输出/输入分配控制台?
谢谢
从 UNIX 的角度来看,因为我在特定于 Mac 的开发方面没有那么丰富的经验。
默认情况下,控制台是“分配的”。但是,您不能命令操作系统打开控制台。您可以告诉您正在使用的 IDE 在终端中打开它,或者,如果它支持,将您当前的应用程序创建为控制台应用程序,尽管使用的是 GUI。
我说控制台是默认分配的是什么意思?每个进程实际上都从调用进程中获取了它的stdin
,stdout
和stderr
(文件标识符 0、1 和 2)。因此,除非调用进程(bash
、Finder 等)方便地忘记让它们保持打开状态,否则您总是会打开一个控制台……但也许是不可见的?
获取控制台的最简单方法是从终端启动应用程序,就像 Finder 从 GUI 启动应用程序一样。请记住,.apps 实际上是文件夹:
/projects/myapp$ ./BuiltApplication.app/Contents/MacOS/BuiltApplication
Finder 将当前工作目录设置为 .app 包所在的文件夹,所以上面的模拟效果最好。
此外,请查看/Applications/Utilities/Console.app
MacOS 附带的控制台应用程序。控制台通常用于查看 stdout 和 stderr。由于我不在 Mac 上,因此我无法对此进行测试,但实际上我发现一些消息来源说 stdout 和 stderr 应该在那里重定向。看到这个帖子:
您可以使用 Console.app 查看以正常方式启动的应用程序的输出,因为启动基础设施专门将它们的
stdout
和发送到stderr
那里。您还可以使用asl
例程来查询日志,或者如果您愿意,可以执行更复杂的日志记录。