64 位系统上的 OS X Carbon 框架

Posted

技术标签:

【中文标题】64 位系统上的 OS X Carbon 框架【英文标题】:OS X Carbon framework on 64bit system 【发布时间】:2014-05-13 11:43:34 【问题描述】:

我正在尝试在 Mac OS X Maverick 上使用 C++ 中的 Carbon 框架创建一个窗口。我需要它来设置 AGL 窗口 OpenGL 上下文。但我发现大多数相关的 Carbon 方法仅在 x86 模式下链接。例如在“CreateNewWindow”方法的标题中明确说明:

可用性:* Mac OS X:在 10.0 版及更高版本中 Carbon.framework [仅限 32 位]

所以我只能在 32 位模式下成功编译它,这对我来说是无用的,因为我的目标是 64 位操作系统。64 位的解决方法是什么?我也对使用 Cocoa + ObjectiveC 的方式不感兴趣。

【问题讨论】:

32 位应用程序在 64 位 OS X 上运行良好。唯一的问题是如果您的应用程序需要大量内存 (> 2 GB)。 我的错误解释 - 我的目标应用程序是 64 位,它不运行发布为 32 位的插件。 好的 - 是时候放弃 Carbon 了 - Apple 已经警告开发者这件事大约 10 年了。 @PaulR 我从几个月前开始就是 Apple 开发人员 ;) 那么我该如何解决这个问题?使用 Cocoa?是否有用于创建窗口的 C/C++ API?我只看到 Obj-C到处都是例子。 是的,Carbon 已经被弃用了很长时间,这就是为什么它从未完全过渡到 64 位的原因。不过,请使用lipo 检查您的应用程序的架构 - 它可能是一个具有 32 位和 64 位可执行文件的“胖”应用程序,在这种情况下,您可以强制它作为 32 位应用程序启动。但从长远来看,您可能应该忘记 Carbon。 【参考方案1】:

如前所述,64 位模式不再支持 Carbon。您需要创建一个 Cocoa 应用程序。做你想做的最简单的方法是创建一个包含NSOpenGLViewNSWindow

此外,AGL 已被弃用。您从NSOpenGLView 获得的上下文将是CGLContext

听起来您正在尝试使一些旧代码正常工作。您还应该阅读 OpenGL 3.3 及更高版本。如果您使用的是与 Carbon 配合使用的 OpenGL 代码,则可能是 OpenGL 1.2 并使用了许多已弃用的功能。

【讨论】:

不。这是我几个月前针对 Lion OS 上的 OpenGL 3.2(可编程)API 编写的非常新鲜的代码。改变的是,当我升级到没有 Windows 创建的 Maverick OpenGL 上下文时,使用时开始崩溃默认帧缓冲区。所以现在我需要创建一个基于窗口的上下文来创建默认的 FBO。至少这是我认为应该做的。 好的,那我把答案的后半部分去掉,但前半部分仍然有效。 Carbon 实际上仍然适用于 64 位应用程序,只是不是它的所有部分。特别是,与窗口相关的任何内容都不可用。 @AndonM.Coleman 这是否意味着 32 位应用程序仍然可以使用窗口功能,还是完全删除了支持? @ShaunWilson:我无法评论 OS X 的当前状态,我已经有一段时间没有使用它了 :-\ 但是,当写该评论时,情况是 64 位 Carbon缺乏对窗口消息循环等的支持。 32 位应用程序可以完全使用 Carbon,这允许您使用 AGL 进行窗口渲染。 Apple 希望您将 Cocoa 用于所有用户交互的东西,花一点时间围绕 Cocoa 使用的 Objective C 类编写一个包装器是个好主意。它们是 Apple 唯一打算支持向前发展的东西。

以上是关于64 位系统上的 OS X Carbon 框架的主要内容,如果未能解决你的问题,请参考以下文章

访问 Cocoa 和/或 Carbon 以在 OS X 上自动启动(在 C++ 上也使用 QT)

MAC OS X API知识摘抄

Qt 4.5发布(最大的变动是换用LGPL许可证,移植进了苹果的Cocoa框架。之前的Qt只支持Carbon框架,现在的Qt 4.5两者都支持。单一源代码创建出支持32位或64位字节的Intel或Po

为啥在Windows XP上用VMware 9装Mac OS X 10.7,装好了却说“客户机操作系统不支持Mac OS X服务器”。

Microsoft 语音服务异常 java.lang.UnsatisfiedLinkError: com.micros oft.cognitiveservices.speech.internal.ca

将 Psyco 移植到 64 位可能存在哪些缺陷?